[英]python : Multiprocess and requests
这篇文章参考了我之前的帖子:
在上一篇文章中,我解释说我有一个名为 Item 的 class object 。 这个项目 class 有一个方法,调用 make_request在服务器上发出 GET 请求。 现在,我已经实现了调用 make_request 的 X Item 对象。 Item 对象将每 X 分钟调用一次该方法,但这些 make_request 必须独立调用。
包含 3 个项目的示例:
原理很简单,object Item_X的make_request方法必须独立于之前object Item_X-1的make_request方法调用。 实际上,make_request 方法必须从 M 分钟(每分钟)开始,例如 30 秒。 如果需要超过30秒才能得到方法的结果,那么它一定不能延迟下一个make_request(多进程和队列?)
我上一篇文章的答案有效,但不够强大:)
我需要的是可能的解决方案。 我想知道您是否有想法在 python3 中执行此操作。 你能给我一些建议(模块?)?
您可以使用apscheduler来实现这一点。 根据您的具体用例,您可以执行许多设置来执行此操作。 例如,将每个项目拆分为自己的工作:
import time
from datetime import datetime, timedelta
from apscheduler.schedulers.blocking import BlockingScheduler
from apscheduler.triggers.interval import IntervalTrigger
class Item:
def __init__(self, name):
self.name = name
def make_request(self):
print(f"{datetime.now()}: {self.name}")
items = [
Item(name="Item0"),
Item(name="Item1"),
Item(name="Item2"),
]
scheduler = BlockingScheduler() # blocks the main thread
for i, item in enumerate(items):
scheduler.add_job(item.make_request,
IntervalTrigger(minutes=len(items)), # every item is executed once per minute
next_run_time=datetime.now() + timedelta(minutes=i), # delay items execution by a minute
)
scheduler.start()
样品 output:
2021-01-19 23:27:27.926250: Item0
2021-01-19 23:28:27.928920: Item1
2021-01-19 23:29:27.924316: Item2
2021-01-19 23:30:27.927307: Item0
2021-01-19 23:31:27.927305: Item1
2021-01-19 23:32:27.931385: Item2
如果make_request
完成所需的时间多于项目数,则可以在完成后重新触发作业,或者允许同时执行同一作业。 另一种可能性是使用CRON 触发器而不是使用next_run_time
延迟来安排作业。
如果您绝对希望同步项目,那么您可以使用max_instances=len(items)
每分钟运行一个作业,并维护标志以查看当前正在运行的项目。 但是,这可能容易出现竞争条件,并且通常需要更多的机械代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.