在Python中我试图让一个无限循环同时开始并行运行,一个简单的例子就是:
from threading import Thread
def func(argument):
while True:
print(argument)
def main():
Thread(target=func("1")).start()
Thread(target=func("2")).start()
Thread(target=func("3")).start()
Thread(target=func("4")).start()
if __name__ == '__main__':
main()
现在只有第一个线程运行,结果是:
1
1
1
1
....
它应该是:
1
2
3
4
....
我发现了几个类似的问题,但所提供的解决方案似乎都不适合我,包括在线程上使用join
。
因此,如果有人知道我的问题的解决方案,那将非常感激。
提前致谢!
答案 0 :(得分:2)
第一个线程没有启动。您正在调用func
中的main
并尝试将其返回值设置为target
,但它会永远运行并且永远不会创建第一个Thread。你想要:
from threading import Thread
def func(argument):
while True:
print(argument)
def main():
Thread(target=func,args=("1",)).start()
Thread(target=func,args=("2",)).start()
Thread(target=func,args=("3",)).start()
Thread(target=func,args=("4",)).start()
if __name__ == '__main__':
main()
这会将func
作为对象传递。启动线程将使用指定的args元组调用该对象。
答案 1 :(得分:1)
您可以定义自己的主题:
from threading import Thread
class MyThread(Thread):
def __init__(self,argument, **kwargs):
super(MyThread, self).__init__(**kwargs)
self.argument = argument
def run(self):
while True:
print self.argument
if __name__ == '__main__':
MyThread('1').start()
MyThread('2').start()
MyThread('3').start()
MyThread('4').start()