Python同时运行两个线程

时间:2014-05-11 19:16:49

标签: python

是否可以同时运行两个线程?例如......

我有两个这样的课......

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}声明。

我所追求的是WhileThread1同时独立运行。

1 个答案:

答案 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")