我想对脚本的这一部分做同样的事情,但可能以不同的方式。可能吗?这个脚本等待所有线程都准备好并启动,然后运行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)
答案 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,以及可能还有许多我不知道的其他东西会阻止你控制程度。