是否可以同时运行两个线程?例如......
我有两个这样的课......
import threading
class Thread1(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
def run(self):
print("Thread1")
class justAClass(object):
def do_soemthing(self):
print("Thread2")
if __name__ == "__main__":
total = 0
thread_limit = 200
while True:
if threading.activeCount() < thread_limit:
Thread1().start()
# I will never run because I want to wait until while True has finished to run!
t = threading.Timer(1.0, justAClass().do_soemthing())
t.start()
如果您运行此代码,您会看到Tread2
永远不会被打印出来,因为Thread2
必须等待Thread1
完成(因为{{1}声明。
我所追求的是While
和Thread1
同时独立运行。
答案 0 :(得分:3)
while True:
if threading.activeCount() < thread_limit:
Thread1().start()
# I will never run because I want to wait until while True has finished to run!
t = threading.Timer(1.0, justAClass().do_soemthing())
t.start()
显然情况就是如此!因为你永远不会离开循环,评论下面的代码是无法访问的。
虽然,你的第一个代码是:
tor.connect()
tor.new_identity()
t = threading.Timer(10.0, tor.new_identity())
t.start()
total = 0
thread_limit = 200
while True:
if threading.activeCount() < thread_limit:
stress_test(host_ip, host_port).start()
你在 无限循环之前启动了Timer
,所以你的Timer
线程肯定正在工作,正如我们在评论。为了使您的SSCCE正常工作,修复:
import threading
import time
class Thread1(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
def run(self):
time.sleep(1)
print("Thread1")
class justAClass(object):
def do_something(self, pause):
while True:
time.sleep(pause)
print("Thread2XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX")
if __name__ == "__main__":
total = 0
thread_limit = 200
t = threading.Timer(1.0, justAClass().do_something, args=(1.0,))
t.start()
while True:
if threading.activeCount() < thread_limit:
Thread1().start()
但是,请注意,具有do_something
功能的计时器线程将只运行一次,除非您从线程内重新启动它,或者在其中构建while循环。
do_something
函数,如果你传递了do_something函数
在最后do_something()
的parens,它将在你的主线程中进行评估
创建计时器,然后你将把函数的结果传递给Timer
函数...然而,如果你不使用parens,你就会给出函数对象本身
到Timer()
然后可以在延迟后调用它。
有没有办法让计时器每x秒运行一次,同时还允许其他功能运行?
当然:
class justAClass(object):
def do_something(self, pause):
while True:
time.sleep(pause)
print("Thread2XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX")