python并发编程1-进程

主进程和子进程

运行结果:

一旦进程创建后,进程就由操作系统调度

代码解析:

子进程与父进程

所以主进程的父进程就是pycharm

args传参

一个参数

两个参数

join作用(创建多个线程):

 

不一定哪个进程先执行,10个进程的执行顺序不固定

代码延伸:
 

from multiprocessing import Process
import time
import os
def func(filename,content):with open(filename,'w') as f:f.write(content*10*'*')
if __name__ =='__main__':p_list=[]for i in range(10):p = Process(target=func, args=('info%s'%i,i))p_list.append(p)p.start()# p.join() 如果加有这句,就会变为同步[p.join() for p in p_list]  # 之前的所有进程必须在这里执行完毕才能执行下面的代码# p0.join()# p1.join()# p2.join()#即使p2线程已经结束,可以执行此代码,若p0.p1还没有结束,则需要等到他们结束才能执行此代码# p3.join()print([i for i in os.walk(r'E:\pythoncode\网络编程\day6-并发编程')])# 同步 0.1*500 = 50
# 异步 500 0.1  =0.1
# 多进程写文件
# 首先往文件中写文件
# 向用户展示写入文件之后文件夹中所有的文件名

开启多个进程(写文件):

from multiprocessing import Process
import time
import os
def func(filename,content):with open(filename,'w') as f:f.write(content*10*'*')
if __name__ =='__main__':p_list=[]for i in range(10):p = Process(target=func, args=('info%s'%i,i))p_list.append(p)p.start()# p.join() 如果加有这句,就会变为同步[p.join() for p in p_list]  # 之前的所有进程必须在这里执行完毕才能执行下面的代码print([i for i in os.walk(r'E:\pythoncode\网络编程\day6-并发编程')])# 同步 0.1*500 = 50
# 异步 500 0.1  =0.1
# 多进程写文件
# 首先往文件中写文件
# 向用户展示写入文件之后文件夹中所有的文件名

运行结果:

开启多个线程的第二种方式:

from multiprocessing import Process
import os
# 第一种方式
# p=Process(target=,args)
# p.start()
#第二种
# 自定义类 继承Process类
# 必须实现一个run方法,run方法是在子进程中执行的代码class MyProcess(Process):def __init__(self,arg1,arg2):super().__init__()   #继承self.arg1=arg1self.arg2=arg2def run(self):print(self.pid)print(self.name)print(self.arg1)print(self.arg2)print(os.getpid())def start(self):self.run()
if __name__ =='__main__':print('主进程pid:',os.getpid())p1=MyProcess(1,2)p1.start()p2=MyProcess(3,4)p2.start()

运行结果:

多进程之间的数据隔离

# 进程与进程之间
from multiprocessing import Process
import os
def func():global n  # 声明一个全部变量n=0        # 重新定义一个nprint('pid:%s'%os.getpid(),n)
if __name__ =='__main__':n=100p=Process(target=func)p.start()p.join()print('主进程:',os.getpid(),n)

运行结果:

对这个数据隔离不太懂

守护进程

#守护进程
#子进程--》守护进程from multiprocessing import Process
import time
def func():while True:time.sleep(0.5)print('我还活着')def func2():print(' func2 start')time.sleep(8)print('func2 finished')if __name__=='__main__':p=Process(target=func)p.daemon=Truep.start()p2 = Process(target=func2)p2.start()p2.terminate()  #结束一个子进程print(p2.is_alive())time.sleep(2)print(p2.is_alive())i=0while i<4:print('socketserver')time.sleep(1)i+=1# 守护进程会随着 主进程的代码 执行完毕 而 结束

运行结果:

锁机制

from multiprocessing import Process,Lock
import json
import time
def show(i):with open('ticket') as f:dic=json.load(f)print('第%s个人还有%s张票'%(i,dic['ticket']))def buy_ticket(lock,i):lock.acquire()with open('ticket') as f:dic = json.load(f)time.sleep(0.1)if dic['ticket']>0:dic['ticket'] -= 1print('\033[32m第%s个人买到票了\033[0m' % i)else:print('\033[31m第%s个人没有买到票了\033[0m' % i)with open('ticket','w') as f:json.dump(dic,f)lock.release()if __name__=='__main__':for i in range(10):p=Process(target=show,args=(i,))p.start()lock=Lock()for i in range(10):p = Process(target=buy_ticket, args=(lock,i))p.start()

运行结果:

错误案例:

from multiprocessing import Process
def func():num=input('>>>')print(num)if __name__ =='__main__':Process(target=func).start()# 发生错误是因为现在这个控制台是主进程的控制台,而输入操作是子线程开启的,所以在主控制台不可以输入,所以报错

多进程实现qq聊天(socketserver模块):

server端:

import socket
from multiprocessing import Processdef serve(conn):ret = '你好'.encode('utf-8')conn.send(ret)msg = conn.recv(1024).decode('utf-8')print(msg)# ret=input('>>>').encode('utf-8')# conn.send(ret)conn.close()
if __name__ =='__main__':sk = socket.socket()sk.bind(('127.0.0.1', 8080))sk.listen()while True:conn,addr=sk.accept()p=Process(target=serve,args=(conn,))p.start()sk.close()

client端:

import socket
sk=socket.socket()
sk.connect(('127.0.0.1',8080))
msg=sk.recv(1024).decode('utf-8')
print(msg)
ret=input('>>>').encode('utf-8')
sk.send(ret)
print(msg)
sk.close()

运行结果:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/568321.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python Pytest装饰器@pytest.mark.parametrize多样参数化(二)

Pytest中装饰器pytest.mark.parametrize(参数名,list)可以实现测试用例参数化&#xff0c;类似DDT 1、第一个参数是字符串&#xff0c;多个参数中间用逗号隔开 2、第二个参数是list,多组数据用元祖类型;传三个或更多参数也是这样传。list的每个元素都是一个元组&#xff0c;元…

python并发编程2-进程

一、信号量 # 多进程中的组件 # ktv # 4个 # 一套资源 同一时间 只能被n个人访问 # 某一段代码 同一时间 只能被n个进程执行from multiprocessing import Process,Semaphore import time import random def ktv(i,sem):sem.acquire()print(%s走进ktv %i)time.sleep(random.ran…

Python Pytest装饰器@pytest.mark.parametrize用例数据驱动(三)

一、测试用例用excel管理&#xff0c;存放地址&#xff1a;C:\Users\wangli\PycharmProjects\Test\test\files\apiCase.xls 二、代码实现如下&#xff1a; 1、封装读取excel用例数据 2、Pytest装饰器pytest.mark.parametrize(参数名,list)实现登录模块2条测试用例数据驱动 im…

python并发编程3-进程

复习&#xff1a; # 锁 # 多个进程在同一时间只有一个进程能进入代码去执行# 信号量 Semaphore from multiprocessing import Semaphore # 用锁的原理实现的。内置了一个计数器 #在同一时间 只能有指定数量的进程执行某一段被控制住的代码#事件 # wait阻塞收到事件状态控制的同…

测试方法之正交试验

一、正交实验法  正交试验设计(Orthogonal experimental design)是研究多因素多水平的又一种设计方法&#xff0c;它是根据正交性从全面试验中挑选出部分有代表性的点进行试验&#xff0c;这些有代表性的点具备了“均匀分散&#xff0c;齐整可比”的特点&#xff0c;正交试验…

python并发编程4-线程

进程的出现 原来一台服务器只能执行一个任务。 进程的出现&#xff0c;可以让一台服务器处理多个任务。多个任务间进行切换&#xff0c;记录每个任务当前执行到哪里&#xff0c;记录有哪些数据。然后进行切换 每个进程区分开每个任务所能占有的内存空间 进程的缺点 线程的出现…

【Fiddler篇】FreeHttp无限篡改http报文数据调试和mock服务

目录 引言 FreeHttp起源 FreeHttp 插件安装FreeHttp 基本界面一&#xff1a;规则匹配区 1.1&#xff1a;『get http sesion in left session list』获取Session信息1.2&#xff1a;『select url filter method』Url匹配方式1.3&#xff1a;『edit advanced http filter』高级匹…

echarts实现双Y轴之散点和折线图

代码&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"utf-8"><title></title><script src"echarts.js"></script> </head><body><div id"box" st…

Pytest装饰器@pytest.mark.parametrize一键生成接口正交试验用例

我们在做接口测试时&#xff0c;有时会遇到涉及用例特别多的时候&#xff0c;每个用例都去手动调一遍&#xff0c;很费时费力&#xff0c;也是不现实的&#xff0c;这篇文章我们就解决下这种费时费力的情况. 一、业务需求 某所大学通信系共2个班级&#xff0c;刚考完某一门课…

python列表对应元素合并为列表及判断一个列表是几维

一、合并对应元素 1、两个列表合并 a[1,2,3,4,5] b[2,3,4,5,6] d[] for i in range(len(a)):c []c.append(a[i])c.append(b[i])d.append(c) print(d) 运行结果&#xff1a; 2、一个列表垂直合并 3、一个列表顺序合并 date[] date_temp1[1545225954.721;1545225955.115, …

Pytest脚本中运行用例方式

脚本树如下&#xff1a; test1文件下test_01.py存放test1和test2用例 test1文件下test_02.py存放test1和test2用例 test2文件下test_03.py存放test1和test2用例 test2文件下test_04.py存放test1和test2用例 1、运行所有用例 import pytest if __name__ "__main__&quo…

js 获取当前元素的父元素的父元素的id

情景一&#xff1a;用onclick触发的函数 html代码&#xff1a; <div id"0" style"border-bottom:1px solid #000;margin:0 auto;"><div>1111</div><div class"original"><div id"chartx1" class"cha…

Python Unittest参数化parameterized之数据驱动

一、parameterized介绍 之前我们写过 Unittest第三方库parameterized类似Unittest的DDT、Pytestpytest.mark.parametrize&#xff0c;可以实现参数化用户数据驱动&#xff0c;避免写多个方法&#xff08;冗余&#xff09; 二、安装 pip install parameterized 三、导入 …

echarts图使用tab和下拉切换

方法一&#xff1a;用tab建切换 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><script type"text/javascript" src"jquery-1.12.4.min.js"></scr…

Pytest fixture之request传参

Pytest中我们经常会用到数据参数化&#xff0c;我们来介绍下装饰器pytest.fixture()配合request传参的使用 user request.param 如果想把登录操作放到前置操作里&#xff0c;也就是用到pytest.fixture装饰器&#xff0c;传参就用默认的request参数 user request.param 这一…

使用securecrt在本地与服务器之间上传下载数据

第一种方式&#xff1a; 1、首先安装&#xff1a;apt install lrzsz lrzsz是一款在Linux里可代替ftp上传和下载的程序。 2、设置上传和下载目录&#xff1a;选项--》会话选项--》X/Y/Zmodem 中设置上传和下载目录 3、上传和下载 上传文件只需在shel中输入命令"rz"…

Pytest自定义标记mark及特定运行方式

mark 标记 标记执行指定类 pytest.main([-s,文件名,-m标记名]) pytest.main([-s,test01.py,-mtest]) import pytest pytest.mark.test class Test(object):def test_01(self):print(test_01)def test_02(self):print(test_02) if __name____main__:#运行指定的类pytest.main…

【Python】Error:'int' object is not callable

python错误&#xff1a; TypeError: int object is not callable 经过百度&#xff0c;可能是 你正在调用一个不能被调用的变量或对象&#xff0c;具体表现就是你调用函数、变量的方式错误。 如&#xff1a; max0 a[1.1, 2.0, 3.0, 4.0, 5.0] maxmax(a) 所以在命名变量时一定…

Pytest跳过执行之@pytest.mark.skip()详解大全

一、skip介绍及运用 在我们自动化测试过程中&#xff0c;经常会遇到功能阻塞、功能未实现、环境等一系列外部因素问题导致的一些用例执行不了&#xff0c;这时我们就可以用到跳过skip用例&#xff0c;如果我们注释掉或删除掉&#xff0c;后面还要进行恢复操作。 1、skip跳过成…

python并发编程5-线程

一、复习 # 线程# 线程是进程中的执行单位# 线程是CPU调度的最小单位# 线程之间资源共享## 线程的开启和关闭以及切换的时间开销远远小于进程# 线程本身可以在同一时间使用多个CPU # threading# 使用方法类似于multiprocess # python与线程# CPython解释器在解释代码中容易产生…