多进程

解决线程间资源争夺问题的另一种方法:互斥锁

#创建锁
mutex = threading.Lock()
# 锁定
mutex.acquire()
# 释放
mutex.release()

 

死锁:当互斥锁使用不当时有可能产生死锁
例:

#导入模块
import threading
# 互斥锁
lock = threading.Lock()
# 获取列表中的元素
def get_value(index):
my_list = [1, 2, 3, 4, 5]
# print("线程", index)
# 同一时间只有一个线程通过下标读取数据操作
lock.acquire()
# 判断是否列表越界
if index >= len(my_list):
print("列表越界:", index)
lock.release()
"""
如果这里不写解锁的话,会导致线程一直处于锁死状态,形成死锁
"""
return
# 通过下标获取列表中的元素
print(my_list[index])
lock.release()
if __name__ == '__main__':
# 定义10个线程 执行get_value
for i in range(10):
# 创建一个子线程
sub_thread = threading.Thread(target=get_value, args=(i,))
# 启动下
sub_thread.start()

 




多进程完成多任务(进程的创建与线程类似)

import multiprocessing, time
def work1():
for i in range(15):
# 运行状态
print("工作1....")
# 等待状态
time.sleep(0.1)
def work2():
for i in range(15):
print("工作2....")
time.sleep(0.1)
if __name__ == '__main__':

# 创建两个子进程完成各自的任务
# 新建状态
work1_process = multiprocessing.Process(target=work1)
work2_process = multiprocessing.Process(target=work2)
# 启动进程 就绪状态
work1_process.start()
work2_process.start()

 



多线程的使用格式

查看当前进程:multiprocessing.current_process()
查看当前进程ID:multiprocessing.current_process().pid
查看当前进程ID:os.getpid()
查看父进程ID:os.getppid()
主进程守护:work_process.daemon = True

多个进程对全局变量的操作时相对独立的,不会相互影响
多进程和多线程的区别:
多进程在某个进程崩溃时不会影响其他进程的运行
多项成在某个线程崩溃后整个程序就终止了

创建一个消息队列
# Queue(x) 可以存放x个元素 如果什么也不写 可以随意添加
queue = multiprocessing.Queue(3)

添加数据
queue.put(数据)

获取元素(先进先出)
queue.get()

posted @ 2018-04-14 20:22  zcznb11  阅读(91)  评论(0)    收藏  举报