python,如何增量创建线程

标签 python multithreading

我有一个大约 60,000 项的项目列表 - 我想向数据库发送查询以检查它们是否存在以及它们是否返回一些计算结果。我运行一个普通查询,同时逐一遍历列表,查询已经运行了最后 4 天。我想我可以使用线程模块来改进这一点。我做了这样的事情

if __name__ == '__main__':
  for ra, dec in candidates:
    t = threading.Thread(target=search_sl, args=(ra,dec, q))
    t.start()
  t.join()

我只测试了 10 个项目并且工作正常 - 当我提交了包含 60k 个项目的整个列表时,我遇到了错误,即“超出最大 session 数”。我想做的是一次创建 10 个线程。当第一组线程完成执行时,我发送另一个请求,依此类推。

最佳答案

您可以尝试使用多处理模块中提供的进程池。这是 python 文档中的示例:

from multiprocessing import Pool

def f(x):
    return x*x

if __name__ == '__main__':
    pool = Pool(processes=4)              # start 4 worker processes
    result = pool.apply_async(f, [10])    # evaluate "f(10)" asynchronously
    print result.get(timeout=1)           # prints "100" unless your computer is *very* slow
    print pool.map(f, range(10))          # prints "[0, 1, 4,..., 81]"

http://docs.python.org/library/multiprocessing.html#using-a-pool-of-workers

尝试增加进程数,直到达到系统可以支持的最大值。

关于python,如何增量创建线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10063353/

相关文章:

python - 使用 sklearn.svm python 使用非线性内核提取系数

python - 删除值为 0 或 999999 的列

c++ - 如果每个线程都有自己的只读数组拷贝,线程会更快吗

java - 有没有另一种方法可以使用 CAS 操作在 Java 中编写同步块(synchronized block)?

c++ - 如何以线程安全的方式遍历二叉树?

python - django runscript 找不到脚本 'myscriptnamehere.py' 的(有效)模块

带有 argparse 的 Python 单元测试

单独线程上的 C# UI

c# - 异步调用方法和/或在其自己的线程上调用方法以提高性能

python - 使用 Python(加密)生成 CSR