zoukankan      html  css  js  c++  java
  • python多线程

    python的标准库提供两个模块:thread和threading,thread是低级模块,threading是高级模块,对thread进行了封装

    1 用threading模块创建多线程

    • 第一种方法是把一个函数传入并创建Thread实例,然后调用start方法执行;
    #!coding:utf-8
    import random
    import time,threading
    
    #新线程执行的代码
    def thread_run(urls):
        print 'Current %s in running...' %threading.current_thread().name
        for url in urls:
            print '%s --->>> %s ' %(threading.current_thread().name,url)
            time.sleep(random.random())
        print('%s ended. '%threading.current_thread().name)
    
    print('%s is running... ' %threading.current_thread().name)
    t1 = threading.Thread(target=thread_run,name='Thread_1',args=(['url_1','url_2','url_3'],))
    t2 = threading.Thread(target=thread_run,name='Thread_2',args=(['url_4','url_5','url_6'],))
    
    t1.start()
    t2.start()
    t1.join()
    t2.join()
    print '%s ended.'% threading.current_thread().name
    

    ``` C:Python27python.exe F:/python_scrapy/python_study/Thread_test.py MainThread is running... Current Thread_1 in running... Thread_1 --->>> url_1 Current Thread_2 in running... Thread_2 --->>> url_4 Thread_1 --->>> url_2 Thread_2 --->>> url_5 Thread_1 --->>> url_3 Thread_1 ended. Thread_2 --->>> url_6 Thread_2 ended. MainThread ended.

    Process finished with exit code 0

    
    * 直接从threading.Thread继承并创建线程类,然后重写__init__方法和run方法
    
    

    !coding:utf-8

    import random,threading,time

    class myThread(threading.Thread):
    def init(self,name,urls):
    threading.Thread.init(self,name=name)
    self.urls=urls

    def run(self):
        print 'Current %s in running... '% threading.current_thread().name
        for url in self.urls:
            print '%s ---->>> %s' % (threading.current_thread().name,url)
            time.sleep(random.random())
        print '%s ended.' %threading.current_thread().name
    

    print '%s is running... '%threading.current_thread().name
    t1 = myThread(name='Thread_1',urls=['url_1','url_2','url_3'])
    t2 = myThread(name='Thread_2',urls=['url_4','url_5','url_6'])

    t1.start()
    t2.start()
    t1.join()
    t2.join()
    print '%s ended.'% threading.current_thread().name

    * 运行结果:
    

    C:Python27python.exe F:/python_scrapy/python_study/Threading.Thread_test.py
    MainThread is running...
    Current Thread_1 in running...
    Thread_1 ---->>> url_1
    Current Thread_2 in running...
    Thread_2 ---->>> url_4
    Thread_2 ---->>> url_5
    Thread_1 ---->>> url_2
    Thread_1 ---->>> url_3Thread_2 ---->>> url_6

    Thread_2 ended.
    Thread_1 ended.
    MainThread ended.

    Process finished with exit code 0

  • 相关阅读:
    JAVA | Guava EventBus 使用 发布/订阅模式
    Go | Go 语言打包静态文件以及如何与Gin一起使用Go-bindata
    写了一个慢接口,年终妥妥的325
    理解C#中的ExecutionContext vs SynchronizationContext
    理解C#中的ConfigureAwait
    反直觉的三门问题
    连求最大公约数都不会,我怕不是上了个假大学
    「补课」进行时:设计模式(22)——桥梁模式
    抄答案就是了,两套详细的设计方案,解决头疼的支付掉单问题
    如何写好绩效考核中的年终总结?
  • 原文地址:https://www.cnblogs.com/guguobao/p/9398818.html
Copyright © 2011-2022 走看看