[英]How to set up a timeout for multithreading?
I have a function that parses documents in a MongoDB collection.我有一个 function 解析 MongoDB 集合中的文档。 I would like to set up a timeout for each thread because I won't know if
function2
will take too much time to finish.我想为每个线程设置一个超时,因为我不知道
function2
是否需要太多时间才能完成。 I tried setting up a @timeout_decorator.timeout(60, use_signals=False)
, but apparently it does not work.我尝试设置
@timeout_decorator.timeout(60, use_signals=False)
,但显然它不起作用。
Better alternatives are considered as well.更好的替代品也被考虑在内。 Any suggestion is greatly appreciated!
非常感谢任何建议!
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 ...
Since you are using executor.submit
all your submitted tasks are returning a Future
object which has its own way to declare a timeout.由于您使用的是
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.