如何在启动它们之前等待所有线程准备就绪

时间:2016-09-01 01:27:58

标签: python multithreading python-3.x

我有这个工作脚本:

import socket, threading

def loop():
    global threads
    get_host = "GET " + url + " HTTP/1.1\r\nHost: " + url + "\r\n"
    accept = "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\nAccept-Language: en-US,en;q=0.5\r\nAccept-Encoding: gzip, deflate\r\n"
    connection = "Connection: Keep-Alive\r\n"
    useragent = "User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36\r\n"
    request = get_host + useragent + accept + connection + "\r\n"
    for x in range(800): 
        send().start() 

class send(threading.Thread):

    def run(self):
        self.requestdefault()
    def requestdefault(self):
        while True:
            try:
                s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
                s.connect((str(url), int(urlport)))
                s.send (str.encode(request))
                print ("Request sent!")
            except:
                pass

loop()

在开始发送结束发送请求之前,如何在所有线程准备就绪之前等待程序?

1 个答案:

答案 0 :(得分:0)

也许您需要一些通知机制。我认为你应该尝试像下面代码段的事件对象:

import threading
import time

event=threading.Event()

def main_thread():
    time.sleep(10)
    event.set() # notify, enable worker thread run

def worker_thread():
    event.wait()
    print threading.currentThread().name +" running \n"

if __name__=='__main__':
    for i in xrange(0,2):
        t=threading.Thread(target=worker_thread)
        t.start()
    main_thread()