【问题标题】:Python running threads sequentially [duplicate]Python按顺序运行线程[重复]
【发布时间】:2018-09-24 12:50:54
【问题描述】:

我正在尝试在 Python 中并行运行代码。

我的用例如下:我有一个需要运行数千次的进程。但由于它依赖于下载,我需要小心我同时运行多少个(我每分钟的请求数量有限)。因此,我希望始终同时运行该功能 10 次,每次完成时我都想启动一个新进程。

在快速阅读之后,线程模块似乎是我正在寻找的。但是,一些小实验似乎表明 Python 不会并行运行线程。

当我运行以下代码时

import threading
import time

wait = 0.4

def f(x):
 for j in range(1,100):
    time.sleep(wait)
    print(x)


threading.Thread(target = f(1)).start()
threading.Thread(target = f(2)).start()

我进入命令行

1
1
1
1
1

在打印完所有 100 个之前,没有一个 2 出现。

这是怎么来的?理论上 f(1) 和 f(2) 应该同时运行吧?

【问题讨论】:

  • 您在创建线程时调用了函数。经典的欺骗
  • 另请注意:range(1, 100) 将打印 99 次,而不是 100 次;第二个数字是它之前停止的极限。

标签: python python-multithreading


【解决方案1】:

这一行

threading.Thread(target = f(1)).start()

基本上说“启动一个新线程并在其中执行f(1)的结果”

你想要的是“启动一个新线程并执行带有参数1的f”,它转换为

threading.Thread(target = f, args=(1,)).start()

【讨论】:

  • 还要注意f(1)返回None,它恰好是一个有效的target(“targetrun()方法调用的可调用对象。默认为None,意味着什么都没有被调用。" - 强调我的)
猜你喜欢
  • 1970-01-01
  • 2016-05-17
  • 1970-01-01
  • 1970-01-01
  • 2018-10-01
  • 1970-01-01
  • 2012-05-08
  • 2016-03-20
  • 2019-08-09
相关资源
最近更新 更多