Python线程未并行处理

标签 python python-3.x python-multithreading

我是 python 的中级蜜蜂,想以并行模式运行少数几个相同的类实例,以获取金融市场的数据和决策。为了继续我的想法,我运行下面的代码来查看 python 是如何工作的,它似乎运行了一个完整的一级实例,在二级实例之后,我想并行运行这个,我怎么能......? 下面是一些用于测试的示例代码..

import threading
import time

class thr(object):

  def __init__(self, name):
     self.name = name
     self.x = 0

  def run(self):
     for i in list(range(10)):
         self.x +=1
         print("something {0} {1}".format(self.name, self.x))
         time.sleep(1)            

F = thr("First")
S = thr("Second")

threading.Thread(target=F.run())
threading.Thread(target=S.run())

结果如下....

something First 1
something First 2
something First 3
something First 4
something First 5
something First 6
something First 7
something First 8
something First 9
something First 10
something Second 1
something Second 2
something Second 3
something Second 4
something Second 5
something Second 6
something Second 7
something Second 8
something Second 9
something Second 10
Out[27]: <Thread(Thread-25, initial)>

最佳答案

问题出在这里:

threading.Thread(target=F.run())
threading.Thread(target=S.run())

target= 采用可调用对象或 NoneF.run() 立即执行 F.run,等待它完成,然后传递返回值(None 在您的 run() 方法中)作为目标。

你想要这样的东西:

t1 = threading.Thread(target=F.run)
t2 = threading.Thread(target=S.run)
t1.start()
t2.start()

注意 run 之后没有括号

这是包含建议更改的完整程序:

import threading
import time

class thr(object):

  def __init__(self, name):
     self.name = name
     self.x = 0

  def run(self):
     for i in list(range(10)):
         self.x +=1
         print("something {0} {1}".format(self.name, self.x))
         time.sleep(1)            

F = thr("First")
S = thr("Second")

t1 = threading.Thread(target=F.run)
t2 = threading.Thread(target=S.run)
t1.start()
t2.start()

和输出(Python 3.6.1):

$ python sf.py
something First 1
something Second 1
something Second 2
something First 2
something Second 3
something First 3
something Second 4
something First 4
something Second 5
something First 5
something Second 6
something First 6
something Second 7
something First 7
something First 8
something Second 8
something First 9
something Second 9
something First 10
something Second 10

关于Python线程未并行处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45113867/

相关文章:

python - Twitter 搜索 API 身份验证

python-3.x - 如何在 tf2.keras 中进行微调时卡住 BERT 的某些层

python - 运行时警告 : coroutine was never awaited self. _target(*self._args, **self._kwargs)

python - 将游戏名称添加到文件中?

python - 使用并发.futures 上传 200 万个文件(每个文件大约 30 KB 从 EC2 到 S3),ThreadPool 需要大量时间

python - 验证随时间变化的连续条件

python /R : generate dataframe from XML when not all nodes contain all variables?

python - 为什么在更改其值时通过函数中的索引访问列表项有效,但迭代器变量方式却不起作用?

python - 使用 Pillow numpy scipy PyBrain 创建 slim 的 Docker 镜像

python - Selenium Python 脚本