Python 多处理超时
Python Multiprocessing Timeout
我有一个程序可以不断从数据库中获取数据,然后处理数据,然后通过 FTP 将其上传到服务器。看起来像:
feed = connect2database()
for data in feed.changes():
data = process(data)
ftpUpload(data)
这里的问题是ftp上传可能会永远挂掉,从而导致程序挂掉。我想实现一种在子进程中进行上传的方法,为每个子进程设置一个超时,如果有一个超时,就将其杀死。我不需要从子进程中取回任何数据,也不需要在上传失败时重试。
但是我不想做.join(time)
,因为主进程必须停在那里等待。我只是想让主进程不断地获取数据然后fork子进程来上传,它超过了超时,就杀掉它以避免僵尸。就这样。有人可以建议架构吗?谢谢
您可以使用 Pebble。
from pebble.process import concurrent
TIMEOUT_IN_SECONDS = 5
feed = connect2database()
for data in feed.changes():
data = process(data)
concurrent(target=ftpUpload, args=(data, ), timeout=TIMEOUT_IN_SECONDS)
用于此类任务的一个很好的框架是 Luigi. It's designed for data dependency, but you can easily set the timeout for each task, and you can set it so it doesn't retry failed tasks. Here's Luigi 的原始用法示例。
要为每个任务设置超时,请将 worker-timeout
设置为以秒为单位的时间量。 http://luigi.readthedocs.org/en/stable/configuration.html
要设置 luigi 使其不再重试任务,请将 disable_failures 设置为 0。http://luigi.readthedocs.org/en/stable/_modules/luigi/scheduler.html
虽然学习 luigi 的工作原理确实需要大量的工作,而且文档比我想要的要少。 Luigi Google Group 是许多 luigi questions/answers 居住的地方。
我有一个程序可以不断从数据库中获取数据,然后处理数据,然后通过 FTP 将其上传到服务器。看起来像:
feed = connect2database()
for data in feed.changes():
data = process(data)
ftpUpload(data)
这里的问题是ftp上传可能会永远挂掉,从而导致程序挂掉。我想实现一种在子进程中进行上传的方法,为每个子进程设置一个超时,如果有一个超时,就将其杀死。我不需要从子进程中取回任何数据,也不需要在上传失败时重试。
但是我不想做.join(time)
,因为主进程必须停在那里等待。我只是想让主进程不断地获取数据然后fork子进程来上传,它超过了超时,就杀掉它以避免僵尸。就这样。有人可以建议架构吗?谢谢
您可以使用 Pebble。
from pebble.process import concurrent
TIMEOUT_IN_SECONDS = 5
feed = connect2database()
for data in feed.changes():
data = process(data)
concurrent(target=ftpUpload, args=(data, ), timeout=TIMEOUT_IN_SECONDS)
用于此类任务的一个很好的框架是 Luigi. It's designed for data dependency, but you can easily set the timeout for each task, and you can set it so it doesn't retry failed tasks. Here's Luigi 的原始用法示例。
要为每个任务设置超时,请将 worker-timeout
设置为以秒为单位的时间量。 http://luigi.readthedocs.org/en/stable/configuration.html
要设置 luigi 使其不再重试任务,请将 disable_failures 设置为 0。http://luigi.readthedocs.org/en/stable/_modules/luigi/scheduler.html
虽然学习 luigi 的工作原理确实需要大量的工作,而且文档比我想要的要少。 Luigi Google Group 是许多 luigi questions/answers 居住的地方。