python 扭曲线程

标签 python twisted

嗨,你能告诉我如何使用线程池在不同的线程中使用不同的函数吗 在扭曲的...说

我有一个 ids 列表 x=[1,2,3,4] 其中 1,2,...etc 是 ids(我从数据库中得到,每个都包含 python 脚本在某些磁盘中)。

我想做的是

扫描列表中的 x 遍历并在不同线程中运行每个脚本,直到它们完成


谢谢 Calderone,您的代码对我帮助很大。

我毫不怀疑我可以通过这种方式调整线程池的大小。

from twisted.internet import reactor
reactor.suggestThreadPoolSize(30)

假设所有 30 个可用线程都忙并且列表(字典或元组)中仍有一些 ID 1-这种情况会遍历所有id吗?我的意思是一旦线程空闲下一个工具(id) 将分配给释放的线程? 2-在某些情况下,一个工具必须在第二个工具之前执行,并且一个工具的输出将被另一个工具使用,如何在双线程中进行管理。 3

最佳答案

Twisted 中的线程主要通过 twisted.internet.threads.deferToThread 使用。或者,有一个稍微更灵活的新接口(interface) twisted.internet.threads.deferToThreadPool。不管怎样,答案大致相同。迭代您的数据并使用其中一个函数将其分派(dispatch)给线程。您从其中任何一个返回一个 Deferred,它会告诉您结果是什么,何时可用。

from twisted.internet.threads import deferToThread
from twisted.internet.defer import gatherResults
from twisted.internet import reactor

def double(n):
    return n * 2

data = [1, 2, 3, 4]

results = []
for datum in data:
    results.append(deferToThread(double, datum))

d = gatherResults(results)
def displayResults(results):
    print 'Doubled data:', results
d.addCallback(displayResults)
d.addCallback(lambda ignored: reactor.stop())

reactor.run()

您可以在 threading howto 中阅读有关 Twisted 中线程的更多信息.

关于 python 扭曲线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3243431/

相关文章:

python - 垃圾收集一个类及其实例的引用?

Python:从json文件获取最大值

python - 为什么在 RTX 3070/cudnn8/CUDA11.1 上运行时添加卷积/池层会使 Keras/Tensorflow 模型崩溃?

python - 在 Python 中通过网络发送对象的最佳方式是什么?

python - Zope 安装到错误的版本(easy_install 和 pip)

python - 从列表理解输出有效地生成 numpy 数组?

python - 在 Pandas 数据框中使用什么 dtype 表示金钱?

python - 脚本中扭曲和更多的客户

python - 在 Twisted *之前* 开始服务时执行异步代码

python - 扭曲的延迟以不期望的方式触发