zoukankan      html  css  js  c++  java
  • Thrading线程

    单线程执行代码:

     1 import time
     2 
     3 
     4 def saySorry():
     5     print("测试代码")
     6     time.sleep(1)
     7 
     8 
     9 if __name__ == '__main__':
    10     for i in range(5):
    11         saySorry()

    单线程下程序运行非常慢,且不能同一时间执行不同的功能。使用多线程后执行代码较快,且能同一时间完成多种功能(例如:同时接收和发送数据)

     1 import threading
     2 import time
     3 
     4 
     5 def test():
     6     print("测试代码")
     7     time.sleep(1)
     8 
     9 
    10 if __name__ == '__main__':
    11     for i in range(5):
    12         t = threading.Thread(target=test)
    13         t.start()   # 调用start方法后才会创建线程以及让这个线程开始运行

    查看线程数量:通过查看threading调用enumerate方法的长度 来判断线程的数量

    1 print("当前运行的线程数为:%d" %len(threading.enumerate())

    线程执行代码的封装:

      如果使用多个线程去做同一件事情时,可以将线程执行代码进行封装,当需要执行相应代码时直接用封装的代码创建线程对象,然后调用start方法后即可执行。

     1 import threading
     2 import time
     3 
     4 
     5 class MyThred(threading.Thread):
     6     def run(self):
     7         for i in range(5):
     8             time.sleep(1)
     9             print("测试代码")
    10 
    11 
    12 if __name__ == '__main__':
    13     t = MyThred()
    14     t.start()

    多线程共享全局变量:

     1 from threading import Thread
     2 import time
     3 
     4 g_num = 100
     5 
     6 
     7 def work1():
     8     global g_num
     9     for i in range(3):
    10         g_num += 1
    11     print("___in worrk1,g_num is %d" % g_num)
    12 
    13 
    14 def work2():
    15     # global g_num
    16     print("___in work2,g_num is %d" % g_num)
    17 
    18 
    19 print("___线程创建之前,g_num is %d" % g_num)
    20 
    21 
    22 t1 = Thread(target=work1)
    23 t1.start()
    24 
    25 # 延迟一会,保证t1线程中的事情做完
    26 time.sleep(0.5)
    27 
    28 t2 = Thread(target=work2)
    29 t2.start()

      执行结果:

    1 ___线程创建之前,g_num is 100
    2 ___in worrk1,g_num is 103
    3 ___in work2,g_num is 103

    补充:threading.Thread()括号内除了传入target=方法名外,还可以用 args=()传入实参到要执行的方法内部,args必须是元组。

     1 from threading import Thread
     2 import time
     3 
     4 
     5 def work1(temp):
     6     temp.append(33)
     7     print("___in work1___", temp)
     8 
     9 
    10 def work2(temp):
    11     print("___in work2___", temp)
    12 
    13 
    14 g_nums = [11, 22]
    15 
    16 # target指定将来这个线程去哪个函数执行代码
    17 # args指定将来调用函数的时候 传递什么数据过去
    18 t1 = Thread(target=work1, args=(g_nums,))    # args传入的是一个元组
    19 t1.start()
    20 time.sleep(1)
    21 t2 = Thread(target=work2, args=(g_nums,))
    22 t2.start()

      执行结果:

    1 ___in work1___ [11, 22, 33]
    2 ___in work2___ [11, 22, 33]
  • 相关阅读:
    useCallback优化React Hooks程序性能
    useMemo优化React Hooks程序性能,解决子组件重复执行问题
    使用 useReducer 和 useCallback 解决 useEffect 依赖诚实与方法内置&外置问题
    createContext 和 useContext 结合使用实现方法共享(React Hook跨组件透传上下文与性能优化)
    浅谈开发变量作用域---小坑
    优雅的在React项目中使用Redux
    浅谈react无状态组件(哑组件)和有状态组件(智能组件)的区别
    浅谈react-router和react-router-dom、react-router-native的区别
    windows系列CMD替换品Terminal控制台推荐——ConsoleZ
    struts——文件上传
  • 原文地址:https://www.cnblogs.com/zzmx0/p/12663784.html
Copyright © 2011-2022 走看看