我正在尝试学习扭曲的框架。但是,我无法解决这个问题。
说,我有这个功能。
def long_blocking_call(arg1, arg2):
# do something
time.sleep(5) # simulate blocking call
return result
results = []
for k, v in args.iteritems():
r = long_blocking_call(k,v)
results.append(r)
但是,我想知道如何利用deferToThread(或扭曲世界中的其他东西)以“并行”方式运行long_blocking_call
我找到了以下示例:Periodically call deferToThread 但是,我不确定这是否可以并行运行吗?
答案 0 :(得分:2)
deferToThread
使用Python的内置线程支持在单独的线程(来自线程池)中运行传递给它的函数。
因此,deferToThread
具有与内置线程模块相同的所有属性。在CPython上,只要其中一个线程持有全局解释器锁,线程就可以并行运行。
由于没有导致“阻塞”的普遍原因,因此也没有针对“阻塞”的普遍的解决方案-因此,无法说出deferToThread
是否会导致并行执行一般来说。但是,一般的经验法则是,如果阻塞来自I / O,则可能会发生,如果阻塞来自计算,则可能不会。
当然,如果它来自I / O,则最好使用Twisted的其他功能代替多线程。