• 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]
  • 相关阅读:
    LoadRunner 技巧之 集合点设置
    LoadRunner 技巧之 IP欺骗 (推荐)
    JMeter 聚合报告之 90% Line 参数说明
    python基础学习笔记(二)
    LoadRunner 技巧之HTML 与 URL两种录制模式分析
    LoadRunner 技巧之 检查点
    LoadRunner 技巧之 思考时间设置
    一个JSlider的例子
    JApplet添加图片
    java.util.Arrays.asList 的小问题
  • 原文地址:https://www.cnblogs.com/zzmx0/p/12663784.html
Copyright © 2020-2023  润新知