首页 > 系统相关 >进程2

进程2

时间:2023-10-30 21:11:22浏览次数:25  
标签:start 队列 print 线程 time 进程

server=socket.socket()括号内参数不写默认为tcp协议
conn,addr=server.accept()
conn是链接对象,addr是地址

.join() 主线程等待子线程运行结束再执行
global 全局变量,局部修改全局


data='hello world'
字符串转二进制:
data=bytes(data,encoding='utf–8')
print(data)
二进制转字符串:
data=str(data,encoding='utf–8')
print(data)

 

进程
current_process().pid 查看当前进程号
os.getpid() 查看当前进程
os.getppid() 查看当前进程的父进程号
Windows终端命令:
tasklist 查看
tasklist |findstr PID查看具体的进程
Mac终端命令:
ps aux 筛选
ps aux|grep

僵尸进程:进程结束后不会立刻释放占用的资源(pid)会保留一段时间供父进程查看
孤儿进程:子进程存在 父进程意外死亡 操作系统会在一段时间后自动回收
守护进程:被守护的进程死亡 守护的进程也立刻跟着死亡
如何开启守护进程:在start语句之前写一下代码即可
p.daenon=Ture
p.atart()
互斥锁:针对一份票 很多人抢的情况 只让一人抢到票,一般是加锁处理
作用将并发改为串行,牺牲了程序运行的效率,保证了数据的安全
注意:只在操作数据的部分加锁即可,锁尽量不要自己去处理很容易造成死锁的现象
from multiporcesing import Lock
mutex=Lock()
抢锁:mutex.aequire()
释放锁:mutex.release()
行锁:操作表格中的一行数据的时候其他人都不能操作
表锁:操作一张表的时候其他人都不能操作

队列Queue
队列:先进先出 堆栈:先进后出
from multiporcesing import Queue
q=Queue括号内可以写数字来限制队列的大小
q.put()放数据 当队列满了再放 阻塞
q.get()取数据 当队列空了再取 阻塞
q.full()判断队列是否满了
q.empty()判断队列是否空了
q.get_nowait()取数据的时候如果没有数据直接报错
q.get_(timeout=5取数据的时候如果没有数据等5秒还没有则直接报错)
进程间通信:
进程之间是无法直接进行数据交互的 但是可以通过队列或者管道实现数据交互
队列:管道+锁
本地测试的时候才可能会用到Queue,实际生产用的都是别人封装好的功能非常强大的工具
Redis
kafka
RQ
生产者与消费者模型:
分成三部分:生产者+消息队列+消费者
生产数据 暂时存数据 从队列里面拿数据去处理
消息队列的存在是为了解决供需不平衡
JoinableQueue
可以被等待的q
你在往队列中放数据的时候 内部有一个计数器自动加1
你在从队列中取数据的时候 调用task_done()内部计时器自动减1
q.join()当前计数器为0的时候才继续往下运行
线程理论:
进程是资源单位 工厂
开进程和开线程的区别:开进程
申请内存空间
拷贝代码
消耗资源较大
线程是执行单位 流水线 是真正干活的人,干活过程中需要的资源由线程所在的进程提供
每一个进程肯定都自带一个线程
同一个进程内可以创建多个线程
开进程和开线程的区别:开线程
同一个进程内创建多个线程 无需上述两部操作,消耗资源相对小

开启进程的两种方式:
方式一:用这种的比较多
from multiprocessing import Process
import time


def task(name):
print('%s is running'%name)
time.sleep(3)
print ('%s isover'%name)
#Windows操作系统下 创建进程一定要在main内创建,因为Windows下创建进程类似于模块导入的方式,会从上往下依次执行代码,注重运行
#Linux中则是把代码完全拷贝一份注重交互
if __name__=='__main__'
#1.创建一个对象
p=Process (target=task,args=('Jason',))
#容器类型哪怕里面只有一个人元素,建议要用逗号隔开
2.开启进程
p.start()#告诉操作系统帮我创建一个进程
print('主')
第二种方法:类的继承(了解,用第一种比较多)
from multiprocessing import Process
import time


class MyProcess(Process):
#类的命名建议使用驼峰式,括号里写继承的Process
def run(self)#函数名字必须写run
print('hello world')
time.sleep(1)
print ('get out')

 

if __name__=='__main__'
p=MyProcess()#实例化这个类是对象
p.start()
print ('主')

总结:创建进程就是在内存中申请一块内存空间,将需要运行的代码丢进去,一个进程对应在内存中就是一块独立的内存空间,多个进程对应在内存中就是多块独立的内存空间,进程与进程之间,数据默认情况下是无法直接交互的,如果想交互可以借助与第三方工具,模块

join方法:让主进程等待子进程类似于同步
若多个p,结果无固定顺序
若要开很多个就可以用for循环:
start_time=time.time()
for i in range (1, 4): 顾头不顾尾
p=Process (target=task,args='子进程%s'%i,i))
p.start()
p.join()
print ('主',time.time()-start_time)
但是这种就是将并发改为串行,时间很慢,一共要六秒多,所以可以把join方法用到全局来如下:

start_time=time.time()
p_list=[ ]#先建一个空列表
for i in range (1, 4): #顾头不顾尾
p=Process (target=task,args='子进程%s'%i,i))
p.start()
p_list.append(p)#拿到一个p就往空列表里追加一个p
for p in p_list:#再把列表的p循环取值
p.join()再让主进程等待子进程一起
print ('主',time.time()-start_time

标签:start,队列,print,线程,time,进程
From: https://www.cnblogs.com/97zs/p/17798841.html

相关文章

  • 进程
    current_process()当前进程pid进程号,每个服务是独一无二的,唯一标识os.getpid()查看当前进程的进程号(子进程的父进程)os.getppid()查看父进程(当前进程的父进程号)查看:windows加入cmd输入tasklist即可查看mac电脑进入终端之后输入psaux即可查看拿到进程号后查看具体的进程:psaux......
  • 查看进程
    ps命令可以查看静态进程,仅仅是捕捉某一个瞬间某一个进程的状态,类似于给进程制作快照。使用“psaux”命令查看当前目录的进程其中,VSZ与RSS可以简单理解为房子的建筑面积与使用面积;当TTY为“?”时,表示不依赖任何终端运行。使用man工具查看STAT,其中,R表示运行,S表示可中断休眠,D表示不......
  • Tornado实现多线程/多进程的HTTP服务
    用tornadoweb服务的基本流程原文链接1.实现处理请求的Handler,该类继承自tornado.web.RequestHandler,实现用于请求的对应方法如:get,post等。返回内容用self.write方法输出。**2.实例化一个Application。**构造函数的参数是一个Handler列表,通过正则表达式,将请求与Handler对应起来......
  • linux怎么看进程
    linux怎么看进程努力的坠雨情2023-02-2022:43上海在Linux系统中,进程(Process)是运行中的程序的实例。每个进程都有其独立的内存空间和系统资源,可以单独运行、中断和结束。在某些情况下,我们需要查看系统中运行的进程,以便了解当前的系统状态或诊断问题。Linux......
  • Linux中进程的控制(上)
    对于进程控制的第一个学习部分那就是使用fork去创建子进程这一部分,请去复习fork那一节的笔记。这里我们主要学习一个在使用fork创建子进程的时候,是如何进行写时拷贝的,在之前的那一节fork的学习中我们学习到的是使用fork创建一个子进程,这里我们要学习的是使用代码去创建多个进程。使......
  • VMware Workstation提示:另一个程序已锁定文件的一部分,进程无法访问,删除.lck文件夹和文
    一、如图二、原因因为虚拟机在运行的时候,会锁定文件,防止被修改,而如果系统突然崩溃,虚拟机就来不急把已锁定的文件解锁。当你再次启动虚拟机的时候,会提示这类错误信息。三、解决进入虚拟机文件夹,删除有关以“.lck”为后缀的文件和文件夹,即可正常启动虚拟机~~~......
  • 线程和进程的特点。
    进程系统资源分配的最小单位;每创建一个进程就会消耗一份资源;每个进程都是独立的,所以进程通信比较复杂,通常需要借助外力,如SysVIPC; 线程系统调度的最小单位;栈独立;资源的开销比进程小;全局数据段是共享的,系统资源也是共享的;多进程在同一个环境内运行容易产生竞争,保证......
  • 10月30日 进程锁+队列
    目录进程锁+队列队列将进程放入队列用(put)读取并且删除队列里面的数据用(get)进程锁+队列进程锁有些类似于绑定方法,它被某个进程使用时,其它进程就要等这个进程结束才能用这个方法。这么做是为了保证数据的安全,加进程锁保证了多个进程修改同一块数据时,同一时间只能有一个进程可......
  • Linux进程函数
    1.进程相关知识PCB进程控制块包含的信息进程id。系统中每个进程有唯一的id,在C语言中用pid_t类型表示,其实就是一个非负整数。进程的状态,有就绪、运行、挂起、停止等状态。进程切换时需要保存和恢复的一些CPU寄存器。描述虚拟地址空间的信息。描述控制终端的信息。当前工作......
  • Linux间进程的通信
    进程间的通信    每个进程都是独立的,都有属于自己的虚拟地址空间,经过操作系统的段页管理将虚拟地址映射到不同的物理内存上,因此不同进程之间的信息是不能直接进行通信的,需要经过内核的帮助才能通信。进程通信的概念    进程间通信又称IPC(......