我是靠谱客的博主 沉默服饰,最近开发中收集的这篇文章主要介绍python自动化之路-day8,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

线程,进程,协程等

python thread模块

线程有两种调用方式:

直接调用:

import threading
import time

def sayhi(num):
    print("threading - > %s"%num )
    time.sleep(2)


if __name__ == '__main__':
    t1 = threading.Thread(target=sayhi,args=(1,))
    t2 = threading.Thread(target=sayhi,args=(2,))
    t1.start()  #启动线程
    t2.start()  #启动另一个线程
    print(t1.getName())
    print(t2.getName())

继承式调用:
import threading
import os
import time


class MyThread(threading.Thread):
    def __init__(self,num):
        threading.Thread.__init__(self)
        self.num = num
    def run(self):
        print("running on number : %s"%self.num)
if __name__ == '__main__':
    t1 = MyThread(1)
    t2 = MyThread(2)
    t1.start()
    t2.start()
互斥锁
"""
一个进程下可以启动多个线程,多个线程共享父进程的内存空间,这也意味着
每个线程可以访问同一份数据,此时,如果2个线程同时要修改同一份数据,
会出现什么情况

"""

import  time
import  threading

def AddNum():
    global  num  #在每个线程中都获取这个全局变量
    print("--get num:",num)
    time.sleep(2)
    num += 1  #对此公共变量进行+1操作

num = 10  #设置一个共享变量
threading_list = []
for i in range(10):
    t = threading.Thread(target=AddNum)
    t.start()
    # print(t)
    threading_list.append(t)
for t in threading_list:
    print(t)
    t.join()

print("final num:",num)

正常来讲,这个num结果应该是0, 但在python 2.7上多运行几次,会发现,最后打印出来的num结果不总是0,
为什么每次运行的结果不一样呢? 哈,很简单,假设你有A,B两个线程,此时都 要对num 进行减1操作,
由于2个线程是并发同时运行的,所以2个线程很有可能同时拿走了num=100这个初始变量交给cpu去运算,
当A线程去处完的结果是99,但此时B线程运算完的结果也是99,两个线程同时CPU运算的结果再赋值给num变量后,
结果就都是99。那怎么办呢? 很简单,每个线程在要修改公共数据时,为了避免自己在还没改完的时候别人也来修改此数据,
可以给这个数据加一把锁, 这样其它线程想修改此数据时就必须等待你修改完毕并把锁释放掉后才能再访问此数据。 

未完待续。。。。。。


最后

以上就是沉默服饰为你收集整理的python自动化之路-day8的全部内容,希望文章能够帮你解决python自动化之路-day8所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部