Python多处理时间OU

2024-09-26 18:03:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个程序,不断从数据库获取数据,然后处理数据,然后通过FTP将其上传到服务器。它看起来像:

feed = connect2database()
for data in feed.changes():
    data = process(data)
    ftpUpload(data)

这里的问题是ftp上传可能永远挂起,这将导致程序挂起。我想实现一种在子进程中执行上载的方法,为每个进程设置一个超时,如果有一个超时,就终止它。我不需要从子进程中获取任何数据,也不需要在上载失败时重试。

但是我不想做.join(time),因为主进程必须停在那里等待。我只想让主进程不断地获取数据,然后fork子进程来做上传,它超过了超时时间,只需杀死它就可以避免僵尸。这就是全部。有人能推荐一种建筑吗?谢谢。


Tags: 数据in程序服务器数据库fordata进程
2条回答

你可以用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。它是为数据依赖而设计的,但是您可以轻松地为每个任务设置超时,并且可以设置超时,这样它就不会重试失败的任务。Here'sLuigi用法的原始示例。在

要为每个任务设置超时,请将worker-timeout设置为以秒为单位的时间量。http://luigi.readthedocs.org/en/stable/configuration.html

要设置luigi使其不会重试任务,请将disable\u failures设置为0。http://luigi.readthedocs.org/en/stable/_modules/luigi/scheduler.html

不过,要了解luigi是如何工作的确实需要大量的工作,而且文档比我希望的要少。Luigi Google Group是许多luigi问题/答案所在的地方。在

相关问题 更多 >

    热门问题