等到所有线程都启动后再运行它们

时间:2016-09-02 21:49:33

标签: python multithreading python-3.x

我想对脚本的这一部分做同样的事情,但可能以不同的方式。可能吗?这个脚本等待所有线程都准备好并启动,然后运行urllib.request的while True ...因为我不想复制粘贴这个方法,有不同的方法吗?

import threading, urllib.request

class request(threading.Thread):
    def run(self):
        while nload:
            time.sleep(1)
        while True:
            urllib.request.urlopen("www.google.it")

nload = 1

for x in range(800):
    request().start()
    time.sleep(0.003)
    print "Thread " + str(x) + " started!"

print "The cycle is running..."
nload = 0
while not nload:
    time.sleep(1)

1 个答案:

答案 0 :(得分:1)

更好的方法是使用threading.Event对象。

import threading, urllib.request

go = threading.Event()

class request(threading.Thread):
    def run(self):
        go.wait()
        while True:
            urllib.request.urlopen("www.google.it")

for x in range(800):
    request().start()
    time.sleep(0.003)
    print "Thread " + str(x) + " started!"

print "The cycle is running..."
go.set()

这可以保证在调用go.wait()之前,任何线程都不会超过go.set()行。它不能确保800线程在同一时刻唤醒,因为你的CPU内核数量,操作系统的调度程序,python的GIL,以及可能还有许多我不知道的其他东西会阻止你控制程度。