我正在研究Python的并发选项。由于我是iOS / macOS开发人员,如果在python中有类似NSOperationQueue的东西,我会发现它非常有用。
基本上,它是一个可以添加操作的队列(每个操作都是使用run方法实现的Operation-derived类),它们可以串行执行,也可以并行执行,或者理想情况下可以在操作上设置各种依赖项(即操作取决于其他人在开始之前执行的情况。)
答案 0 :(得分:2)
Celery是基于分布式消息传递的异步任务队列/作业队列。它专注于实时操作,但也支持调度。
答案 1 :(得分:2)
我也在寻找它。但是由于它似乎还不存在,所以我编写了自己的实现:
import time
import threading
import queue
import weakref
class OperationQueue:
def __init__(self):
self.thread = None
self.queue = queue.Queue()
def run(self):
while self.queue.qsize() > 0:
msg = self.queue.get()
print(msg)
# emulate if it cost time
time.sleep(2)
def addOperation(self, string):
# put to queue first for thread safe.
self.queue.put(string)
if not (self.thread and self.thread.is_alive()):
print('renew a thread')
self.thread = threading.Thread(target=self.run)
self.thread.start()
myQueue = OperationQueue()
myQueue.addOperation("test1")
# test if it auto free
item = weakref.ref(myQueue)
time.sleep(1)
myQueue.addOperation("test2")
myQueue = None
time.sleep(3)
print(f'item = {item}')
print("Done.")