是否有像Python中的ObjectiveC那样的NSOperationQueue?

时间:2017-12-19 12:26:30

标签: python objective-c nsoperationqueue

我正在研究Python的并发选项。由于我是iOS / macOS开发人员,如果在python中有类似NSOperationQueue的东西,我会发现它非常有用。

基本上,它是一个可以添加操作的队列(每个操作都是使用run方法实现的Operation-derived类),它们可以串行执行,也可以并行执行,或者理想情况下可以在操作上设置各种依赖项(即操作取决于其他人在开始之前执行的情况。)

2 个答案:

答案 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.")