138 python|第八部分:并发网络编程多任务编程上--进程
Posted 缓缓而行
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了138 python|第八部分:并发网络编程多任务编程上--进程相关的知识,希望对你有一定的参考价值。
-u 用户名
sleep(2)
print("func01 over")
sleep(3)
print("func02 over")
print("error")
func01()
func02()
print("child pid:",os.getpid())#获取当前进程(子进程)的进程号
print("parent pid", os.getppid())#获取父进程的进程号
print("parent pid",os.getpid())#获取当前进程(父进程)的进程号
print("child pid:",pid)#父进程的返回值是子进程的 pid
print("child pid:",os.getpid())#获取当前进程(子进程)的进程号
print("parent pid", os.getppid())#获取父进程的进程号
print( print( print( sleep(2)
print("func01")
sleep(3)
print("func02")
print("error")
pid_0 = os.fork()#二级子进程
if pid_0 ==0:
func01()#执行二级子进程
else:#一级子进程
os._exit(0)#在创建完二级子进程后直接退出
os.wait()
func02()#等一级子进程结束,执行这句
print("child process",os.getpid())
os._exit(0)
while True:
pass
os
time sleep
sleep( print(os.getppid(), sleep( print(os.getppid(), sleep( print(os.getppid(),th [fun1,fun2,fun3]:
p = Process(target=th)
jobs.append(p)
p.start()
i jobs:
i.join()
sleep(sec)
print("I\'m %s"%name)
print("I\'m working...")
multiprocessing Process
os
fr = open(filename, fw = open( n = size // fw.write(fr.read(n))
fr.close()
fw.close()
fr = open(filename, fw = open( fr.seek(size// fw.write(fr.read())
fr.close()
fw.close()
print( print( __name_== p = MyProcess( p.start() p.join()
i range( n % i == False
True prime = []
i range( ifprime(i) prime.append(i) sum(prime) = = i range( ifprime(i):
sum( prime = [] processes = [] i range( p = prime2(prime,i,i+ p.start() processes.append(p) [process.join() process processes] prime = []
processes = []
i range( f = prime2(prime,i,i+ f.start()
processes.append(f)
[process.join() process processes]
__name_== use10_multi_process()给func函数以字典形式位置传参
事件函数
multiprocessing Pool
time sleep
os
sleep( print(os.getpid(), msgi range( msg = r = pool.apply_async(func=fun,args=(msg,))multiprocessing Pool
time sleep
sleep( print( n * n
当block为True表示超时时间
注:block和timeout二选一
time sleep
i range( sleep( q.put( print(q.get(timeout= return
p1 = Process(target=bar)#进程1
p2 = Process(target=foo)#进程2
p1.start()#开启进程1
p2.start()#开启进程2
p1.join()#回收进程1
p2.join()#回收进程2
"""
使用进程池拷贝一个目录及目录中的所有内容
目录中的内容均为普通文件;
进程池中执行的每个进程事件拷贝一个文件
实时显示拷贝的百分比
拷贝目录:/home/huanhuan/myfile/target
"""
参考资料
花样早餐展
139 python|第八部分:并发网络编程多任务编程下--线程
time sleep
i range( sleep( print(i range( sleep(threading Thread
time sleep
print( sleep(sec)
print(i range( t = Thread(target = func,
args = ( kwargs = )
t.start()threading Thread
time sleep
self.song = song
super().__init__()
i range( sleep( print(threading Threadfrom time sleepthreading
time
print(% threading.currentThread().getName())
event.wait() print(% threading.currentThread().getName())
threading Thread,Lock
lock.acquire() a != b: print( lock.release() lock.acquire() a += b += lock.release()time sleep
self.id = id
self.balance = balance
self.balance -= amount
self.balance += amount
self.balance
from_.lock.acquire() from_.get(amount) sleep( to.lock.acquire() to.put(amount) from_.lock.release() to.lock.release()
#一方给另一方转钱
trans(Peiqi,George,10)
print(\'Peiqi:\',George.getbalance())
print(\'George:\',Peiqi.getbalance())
阻塞的原因是产生了死锁。根据上面提到的死锁的避免方式,我们只要让死锁四个产生条件不要同时出现即可。
运行结果:
05 GIL(global interpreter lock)问题
5.1 概念
1.GIL问题与python语言本身没什么关系,属于解释器设置历史的问题。
2.在无阻塞状态下,多线程程序执行效率并不高,甚至还不如单线程。
3.python多线程只适用于执行有阻塞延迟的任务情形。
06 进程和线程的联系&区别
6.1 联系&区别
进程和线程的联系&区别 | |
---|---|
类别 | 说明 |
联系 | 1.两者都是多任务编程,都能使用计算机多核资源 |
2.一个进程可以有多个分支线程,两者有包含关系 | |
3.多个线程共享进程资源,在共享资源操作时往往需要同步互斥处理。 | |
区别 | 1.进程的创建和删除消耗的计算机资源比线程多 |
2.进程空间独立,数据互不干扰,有专门的通信方法;线程使用全局变量通信 | |
3.python线程存在GIL问题,但进程没有 |
参考资料
拓展资料
花样早餐展
以上是关于138 python|第八部分:并发网络编程多任务编程上--进程的主要内容,如果未能解决你的问题,请参考以下文章
Python自动化 第八篇:Python基础-Socket编程进阶