首页 > 其他分享 >线程、携程

线程、携程

时间:2022-11-21 22:33:40浏览次数:54  
标签:__ name 携程 线程 time print import

目录

并发编程

3.进程

16)互斥锁

(1)什么是互斥锁

并发/并行改为串行(类似单道),牺牲了效率保障了数据的安全

除了有互斥锁,还有:行锁、表锁、乐观锁、悲观锁..等

(2)互斥锁如何使用
from multiprocessing import Lock  # 导入互斥锁模块

mutex = Lock()  # 产生锁
mutex.acquire()  # 抢锁
# (操作数据代码)
mutex.release()  # 释放锁

"""
注:
  互斥锁之应该放在程序操作的上下,其他位置不要加 会让整个程序的效率特别低
"""
(3)互斥锁解决模拟抢票问题
from multiprocessing import Process,Lock
import time
import json
import random

# 查票
def search(name):
    with open(r'data.json', 'r', encoding='utf8') as f:
        data = json.load(f)
    print(f'{name}在查票 当前余票为:{data.get("ticket_num")}')

# 买票
def buy(name):
    # 再次确认票
    with open(r'data.json', 'r', encoding='utf8') as f:
        data = json.load(f)
    # 模拟网络延迟
    time.sleep(random.randint(1, 3))
    # 判断是否有票 有就买
    if data.get('ticket_num') > 0:
        data['ticket_num'] -= 1
        with open(r'data.json', 'w', encoding='utf8') as f:
            json.dump(data, f)
        print(f'{name}买票成功')
    else:
        print(f'{name}很倒霉 没有抢到票')

def run(name, mutex):
    search(name)
    mutex.acquire()  # 抢锁
    buy(name)
    mutex.release()  # 释放锁

if __name__ == '__main__':
    mutex = Lock()  # 产生一把锁
    for i in range(3):
        p = Process(target=run, args=(f'用户{i}', mutex))
        p.start()
        """
        执行结果:
          用户0在查票 当前余票为:1
          用户1在查票 当前余票为:1
          用户2在查票 当前余票为:1
          用户0买票成功
          用户1很倒霉 没有抢到票
          用户2很倒霉 没有抢到票
        """

4.线程

1)线程理论

进程:进程是资源单位,表示一块内存空间
线程:线程是执行单位,表示真正的代码指令

进程可以理解为车间 线程可以理解为流水线
一个进程内【至少会含有一个线程】!!!!

标签:__,name,携程,线程,time,print,import
From: https://www.cnblogs.com/lvqingmei/p/16913607.html

相关文章