摘要: #1、from concurrent import futures可以开启进程池和线程池。concurrent是包,futures是模块,ThreadPoolExecutor是类,submit是方法。 #submit创建和开启子线程: from concurrent import futures i 阅读全文
posted @ 2020-01-02 23:37 梁劲雄 阅读(156) 评论(0) 推荐(0) 编辑
摘要: #1、线程的队列是使用import queue,如果使用from threading import Queue会报错,因为threading模块没有Queue。 #也就是说,线程队列Queue是在queue模块里面,不在threading模块里面。 import queue q = queue.Qu 阅读全文
posted @ 2020-01-02 23:35 梁劲雄 阅读(142) 评论(0) 推荐(0) 编辑
摘要: #条件:Condition、notify通知、notify_all、wait #条件 = 递归锁 + wait功能 #条件可以让主线程控制多少个子线程可以执行。 import threading def play(con,i): con.acquire() #所有人都拿到了钥匙 con.wait() 阅读全文
posted @ 2020-01-02 23:34 梁劲雄 阅读(173) 评论(0) 推荐(0) 编辑
摘要: #1、定时器: from threading import Timer def func(): print('定时器') t = Timer(1,func) #定时一秒,开启func线程。 t.start() #2、睡眠时间短,线程一直开着,每一秒打印出@@@: from threading imp 阅读全文
posted @ 2020-01-02 23:33 梁劲雄 阅读(94) 评论(0) 推荐(0) 编辑
摘要: #1、Event里面有一个标志flag,当e = Event()刚创建的时候,flag=False,阻塞,这个时候,e.is_set()也是等于False,阻塞。 #e.set()让flag变成非阻塞,e.clear()让flag变成阻塞。 #e.wait() 当flag=True,非阻塞;当fla 阅读全文
posted @ 2020-01-02 23:31 梁劲雄 阅读(109) 评论(0) 推荐(0) 编辑
摘要: #1、信号量,用来保证多个线程不会互相冲突。 #2、迷你唱吧:每次只能有两人在里面唱k: from threading import Thread from threading import Semaphore import time import random def sing(i,sem): s 阅读全文
posted @ 2020-01-02 23:28 梁劲雄 阅读(110) 评论(0) 推荐(0) 编辑
摘要: #1、锁:防止多个线程同时读写某一块内存区域。 from threading import Thread from threading import Lock def func(): global n lock.acquire() n -= 1 #每一个线程在操作数据之前先拿到钥匙,操作完成之后,释 阅读全文
posted @ 2020-01-02 23:27 梁劲雄 阅读(163) 评论(0) 推荐(0) 编辑
摘要: #1、守护线程要注意的坑:下面代码只能打印出子线程开始,无法打印出子线程执行完毕,因为主线程在t.start()以后就结束了, #而子线程要睡眠1秒,所以子线程守护线程随着主线程的结束而结束了。 from threading import Thread import time def func(): 阅读全文
posted @ 2020-01-02 23:26 梁劲雄 阅读(126) 评论(0) 推荐(0) 编辑
摘要: #server: import socket from threading import Thread def func(conn): conn.send(b'hello client') ret = conn.recv(1024).decode('utf-8') print(ret) conn.c 阅读全文
posted @ 2020-01-02 23:24 梁劲雄 阅读(183) 评论(0) 推荐(0) 编辑
摘要: #1、开启线程: from threading import Thread import os def func(): print('func',os.getpid()) t = Thread(target=func) t.start() print(os.getpid()) # func 1045 阅读全文
posted @ 2020-01-02 23:23 梁劲雄 阅读(159) 评论(0) 推荐(0) 编辑
摘要: #1、进程:程序不能单独运行,要将程序加载到内存当中,系统为它分配资源才能运行,而这种执行的程序就是进程。 #程序和进程的区别在于:程序是指令的集合,它是进程运行的静态描述文本;进程是程序的一次执行活动,属于动态概念。 #在多道编程中,允许多个程序同时加载到内存中,在操作系统的调度下,可以实现并发的 阅读全文
posted @ 2020-01-02 23:21 梁劲雄 阅读(101) 评论(0) 推荐(0) 编辑
摘要: #进程池Pool:apply apply_async-close-join-get map callback #1、进程池Pool:执行下面代码发现任务012先执行,345后执行,因为进程池只有3个进程,6480进程先处理1,接着处理3和5。 # 可以设置线程的数量去轮流执行它的任务:例如下面例子设 阅读全文
posted @ 2020-01-02 23:20 梁劲雄 阅读(129) 评论(0) 推荐(0) 编辑
摘要: #1、管道Pipe:双向通信: from multiprocessing import Pipe p1,p2 = Pipe() p1.send('hello') print(p2.recv()) p2.send('hi') print(p1.recv()) # hello # hi #2、当管道一端 阅读全文
posted @ 2020-01-02 23:19 梁劲雄 阅读(85) 评论(0) 推荐(0) 编辑
摘要: #1、队列的数据是安全的,因为队列内置了一把锁,大家都来抢占资源的时候,A在操作数据的时候,B就无法操作该数据。 # 下面代码有两个生产者和三个消费者,包子吃完之后,接着放的两个None被marry和alex吃到了,所以吃饱了,剩下的牛奶,tom吃完。 # 放在队列里面的None的数量需要根据生产者 阅读全文
posted @ 2020-01-02 23:16 梁劲雄 阅读(143) 评论(0) 推荐(0) 编辑
摘要: #队列Queue:进程之间数据是隔离的,不共享的,但是通过multiprocessing的Queue可以实现进程之间的通信。 #1、先进先出:把1 2 3放到队列里,按1 2 3的顺序拿出来。 from multiprocessing import Queue q = Queue() q.put(1 阅读全文
posted @ 2020-01-02 23:15 梁劲雄 阅读(124) 评论(0) 推荐(0) 编辑
摘要: #1、事件Event:以交通灯为例。可以控制所有进程等待或者运行。 from multiprocessing import Event e = Event() #实例化一个事件,创建一个交通灯,默认是红灯,阻塞。 e.set() #红变绿,非阻塞。可以控制所有进程通行。。 e.wait() #停的时 阅读全文
posted @ 2020-01-02 23:13 梁劲雄 阅读(126) 评论(0) 推荐(0) 编辑
摘要: #1、锁:房间的门上有一把锁,锁上有一把钥匙,一个人使用这把钥匙开锁之后,带上钥匙进入房间,把门给反锁了,他在房间干活, # 只要他不出来还锁,别人是无法进入房间的。同时只能有一个人在房间里干活。效率低,但能保证数据安全。 # 锁 在并发编程中保证数据安全。 #多进程实现并发:多进程就是同时开启多个 阅读全文
posted @ 2020-01-02 23:10 梁劲雄 阅读(145) 评论(0) 推荐(0) 编辑
摘要: #1、server端跟多个client端聊天: #异步操作,主进程负责接收client的连接,子进程负责跟client聊天。 #每接收一个连接,就创建一个子进程,子进程之间的数据是隔离的,互不影响,所以server端可以跟多个client端聊天。 #server: import socket fro 阅读全文
posted @ 2020-01-02 23:07 梁劲雄 阅读(139) 评论(0) 推荐(0) 编辑
摘要: #1、异步非阻塞: import os from multiprocessing import Process def func(): print('子进程:',os.getpid()) if __name__ == '__main__': p = Process(target = func) #创 阅读全文
posted @ 2020-01-02 23:04 梁劲雄 阅读(112) 评论(0) 推荐(0) 编辑