簡體   English   中英

如何為多線程設置超時?

[英]How to set up a timeout for multithreading?

我有一個 function 解析 MongoDB 集合中的文檔。 我想為每個線程設置一個超時,因為我不知道function2是否需要太多時間才能完成。 我嘗試設置@timeout_decorator.timeout(60, use_signals=False) ,但顯然它不起作用。

更好的替代品也被考慮在內。 非常感謝任何建議!

def function(collection):
    with concurrent.futures.ThreadPoolExecutor(max_workers=10) as executor:
        for document in collection.find({}, no_cursor_timeout=True):
            executor.submit(function2, document)

def function2(collection, document):
    try: 
        ... something ...

由於您使用的是executor.submit ,因此您提交的所有任務都將返回一個Future object,它有自己的方式來聲明超時。

def function(collection):
    futures = []
    with concurrent.futures.ThreadPoolExecutor(max_workers=10) as executor:
        for document in collection.find({}, no_cursor_timeout=True):
            future = executor.submit(function2, document)
            futures.append(future)

futures = function(collection)
for future in concurrent.futures.as_completed(futures):
    result = future.result(timeout=60)

您可以在此處找到更多文檔。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM