【问题标题】:python threading not starting / super slowpython线程没有启动/超慢
【发布时间】:2021-07-20 14:36:57
【问题描述】:
def main():
    proxies = [i for i in open('proxies.txt', 'r+').readlines()]
    instance = Pair('0x852E3A65d0cD8561eDc0927012412D60AAAa9a4C', proxies)

    num_worker_threads = int(500)
    threading.Thread(target=instance.set_title, name="set_title").start()

    for i in range(num_worker_threads):
        threading.Thread(target=instance.get_pair()).start()

if __name__ == '__main__':
    main()

我正在尝试将线程添加到我的程序中,但是无论我放入 500 或 1 个线程,它的速度仍然相同。它运行的函数是一个 While True 循环,其中包含一个 try 和一个 get 请求。

如果您对我做错了什么有任何想法,请帮助:)

【问题讨论】:

  • 您的意思是:target=instance.get_pair
  • 另外,targets 在做什么?如果他们正在做 CPU 密集型工作,那么线程在这里不会有太大帮助。除非你在做 IO 工作,否则你需要使用多处理。
  • 我从get request 的 OP 中获取了声明,表示网络绑定工作。
  • @quamrana 是的。除非getset 是“GET”/“POST”请求之类的,否则函数的名称听起来不是很基于 IO。
  • 是的,你是对的,我对此感到很愚蠢,但非常感谢。澄清是target=instance.get_pair 修复了它。

标签: python python-3.x multithreading


【解决方案1】:

按照 Carcigenicate 所说的...

首先需要注意的是 python 是单线程的。线程库给人的印象是您正在获得真正的多线程,但实际上并非如此。

话虽如此...如果您的任务花费大量时间等待某事发生(通常是 IO 绑定操作,例如用户输入、从文件读取数据或从 Internet 获取数据),那么这就是线程库的亮点......它允许您在等待其他功能的同时做一些事情。但是,它的核心仍然只是在单个线程上运行。因此,如果您的函数不受 IO 限制,那么您应该期望使用线程库不会有任何改进。

在这种情况下,您可以尝试使用多处理库,但要小心行事,因为它可能很难正确...

【讨论】:

  • 为了清楚起见,应该注意 Python 不是单线程的。它是多线程的,但线程内字节码的执行在所有线程之间是同步的。您可以同时运行多个线程,但任何时候只有一个线程可以执行代码。
猜你喜欢
  • 2014-04-06
  • 1970-01-01
  • 1970-01-01
  • 2021-08-03
  • 1970-01-01
  • 1970-01-01
  • 2021-04-03
  • 1970-01-01
  • 2011-11-27
相关资源
最近更新 更多