import threading
from concurrent.futures import ThreadPoolExecutor,as_completed,wait
import time
#
# def task(name):
#     print('task: %s'%name)
local_data=threading.local()
local_data.name='local__data'
class MyThread(threading.Thread):
    def __init__(self,event):
        super().__init__()
        self.event=event
    def run(self):
        print('thread %s init finish,ready to run'%self.name)
        self.event.wait()
        print("thread %s start execute...."%self.name)

class MyThread1(threading.Thread):
    def __init__(self,cond,name):
        threading.Thread.__init__(self,name=name)
        self.cond=cond
    def run(self):
        self.cond.acquire()
        print(self.getName()+': aaaaa')
        self.cond.notify()
        self.cond.wait()
        print(self.getName() + ': bbbb')
        self.cond.notify()
        self.cond.wait()
        print(self.getName() + ': ccc')
        self.cond.notify()
        self.cond.release()
class MyThread2(threading.Thread):
    def __init__(self,cond,name):
        threading.Thread.__init__(self,name=name)
        self.cond=cond
    def run(self):
        self.cond.acquire()
        self.cond.wait()
        print(self.getName()+': 11111')
        self.cond.notify()
        self.cond.wait()
        print(self.getName() + ': 22222')
        self.cond.notify()
        self.cond.wait()
        print(self.getName() + ': 333333')
        self.cond.release()

class MyThreadLocal(threading.Thread):
    def run(self):
        print('==value before',threading.currentThread(),local_data.__dict__)
        local_data.name=self.getName()
        print("==value after",threading.currentThread(),local_data.__dict__)

def get_html(times):
    time.sleep(times)
    print('get html wait %d'%times)
    return times
executor=ThreadPoolExecutor(max_workers=3)
if __name__=='__main__':
    # event = threading.Event()
    # threads=[MyThread(event) for i in range(10)]
    # event.clear()
    # for th in threads:
    #     th.start()
    #     th.daemon
    # event.set()


    # cond=threading.Condition()
    # th1=MyThread1(cond,'AAA')
    # th2 = MyThread2(cond, '6666')
    # th2.start()
    # th1.start()
    # th1.join()
    # th2.join()
    # print('talk end')

    # print("==main before", local_data.__dict__)
    # th1=MyThreadLocal()
    # th1.start()
    # th1.join()
    # th2=MyThreadLocal()
    # th2.start()
    # th2.join()
    # print("==main after", local_data.__dict__)

    # task1=executor.submit(get_html,1)
    # task2 = executor.submit(get_html, 2)
    # task3 = executor.submit(get_html, 3)
    # task4 = executor.submit(get_html, 4)

    # tasks=[executor.submit(get_html,tm) for tm in range(1,4)]
    # for tk in  as_completed(tasks):
    #     tkret=tk.result()
    #     print('task result %d'%tkret)
    
    tasks=executor.map(get_html,[1,4,5])
    for tk in  tasks:
        print('task result %d'%tk)
import threading,time
sem=threading.Semaphore(value=2)

class HtmlSpider(threading.Thread):
    def __init__(self,url,sem):
        super().__init__()
        self.url=url
        self.sem=sem
    def run(self):
        time.sleep(2)
        print('%s html spider run'%self.url)
        self.sem.release()
class UrlProducer(threading.Thread):
    def __init__(self,  sem):
        super().__init__()
        self.sem = sem
    def run(self):
        for i in range(10):
            self.sem.acquire()
            th=HtmlSpider('http://www.howhy.com/page/%d'%i,self.sem)
            th.start()
if __name__=='__main__':
    urlproducer=UrlProducer(sem)
    urlproducer.start()