python17进程
import os
import time
from multiprocessing.dummy import Process def so_sth(name):
print("进程名称{},{}".format(name, os.getpid()))
time.sleep(5)
print("进程ok") #面向对象实现
class MyProcess(Process): def __init__(self,name,*args,**kwargs):
self.myname = name#不能用self.name,因为这个父类里面已经有了
#这个变量,下面调用父类的会出错
super().__init__(*args,**kwargs) def run(self):
print("进程名称{},{}".format(self.myname, os.getpid()))
time.sleep(5)
print("进程ok") if __name__ == "__main__":
#p = Process(target=so_sth,args=("quan",))
p = MyProcess("myprocessclass")
p.start()
p.join()
输出结果:
D:\anaconda\python.exe D:/PycharmProjects/untitled0406/test1.py
进程名称myprocessclass,12436
进程ok
import time
import random
from multiprocessing.dummy import Process
from queue import Queue class WriteProcess(Process):
"""写的进程"""
def __init__(self,q,*args,**kwargs):
self.q = q
super().__init__(*args,**kwargs) def run(self):
"""实现写进程的业务逻辑"""
ls = [
"11111111111",
"22222222222",
"33333333333",
"44444444444",
] for line in ls:
#写入
print("x写入内容{}".format(line))
self.q.put(line)
time.sleep(random.randint(1,5)) class ReadProcess(Process):
"""读的进程"""
def __init__(self, q, *args, **kwargs):
self.q = q
super().__init__(*args, **kwargs) def run(self):
while True:
content = self.q.get()
print("读取达到的内容为{}".format(content)) if __name__ == "__main__":
#通过Queue共享数据
q = Queue()
t_write = WriteProcess(q)
t_write.start()
#读取进程
t_read= ReadProcess(q)
t_read.start() t_write.join()
#t_read.join()#由于读进程是死循环,无法等待其结束,只能强制终止
t_read.terminate() #####################
#Queue通过实例传给两个不同的进程, 结果:
x写入内容11111111111
读取达到的内容为11111111111
x写入内容22222222222
读取达到的内容为22222222222
x写入内容33333333333
读取达到的内容为33333333333
x写入内容44444444444
读取达到的内容为44444444444
import time
from multiprocessing.context import Process
import random class WP(Process):
"""写入文件""" def __init__(self,file_name,num,*args,**kwargs):
self.file_name = file_name
self.num = num
super().__init__(*args,**kwargs) def run(self):
for i in range(5):
content = "现在是:{0},{1}.{2}\n".format(
self.name,
self.pid,
self.num
)
with open(self.file_name, "a+",encoding="utf-8") as f:
f.write(content)
time.sleep(random.randint(1,5))
print(content) if __name__ == "__main__":
file_name = "test.txt"
for x in range(5):
p = WP(file_name,x)
p.start() 结果:
现在是:WP-3,18280.2
现在是:WP-2,2004.1
现在是:WP-1,17244.0
现在是:WP-5,17600.4
现在是:WP-3,18280.2
现在是:WP-4,17712.3
现在是:WP-5,17600.4
现在是:WP-1,17244.0
现在是:WP-2,2004.1
现在是:WP-5,17600.4
现在是:WP-2,2004.1
现在是:WP-3,18280.2
现在是:WP-4,17712.3
现在是:WP-5,17600.4
现在是:WP-5,17600.4
现在是:WP-1,17244.0
现在是:WP-2,2004.1 现在是:WP-1,17244.0
现在是:WP-4,17712.3
现在是:WP-3,18280.2
现在是:WP-1,17244.0
现在是:WP-4,17712.3
现在是:WP-2,2004.1
现在是:WP-4,17712.3
从上面可以看出写的是杂乱无章的
我们可以加个进程锁
import time
from multiprocessing.context import Process
import random
from multiprocessing import Lock class WP(Process):
"""写入文件""" def __init__(self,file_name,num,lock,*args,**kwargs):
self.file_name = file_name
self.num = num
self.lock = lock
super().__init__(*args,**kwargs) def run(self): try:
self.lock.acquire()
for i in range(5):
content = "现在是:{0},{1}.{2}\n".format(
self.name,
self.pid,
self.num
)
with open(self.file_name, "a+",encoding="utf-8") as f:
f.write(content)
time.sleep(random.randint(1,5))
print(content)
finally:
self.lock.release() if __name__ == "__main__":
file_name = "test.txt"
lock = Lock()
for x in range(5):
p = WP(file_name,x,lock)
p.start() 结果:
现在是:WP-1,9852.0
现在是:WP-1,9852.0
现在是:WP-1,9852.0
现在是:WP-1,9852.0
现在是:WP-1,9852.0
现在是:WP-4,18316.3
现在是:WP-4,18316.3
现在是:WP-4,18316.3
现在是:WP-4,18316.3
现在是:WP-4,18316.3
现在是:WP-2,15132.1
现在是:WP-2,15132.1
现在是:WP-2,15132.1
现在是:WP-2,15132.1
现在是:WP-2,15132.1
现在是:WP-5,18260.4
现在是:WP-5,18260.4
现在是:WP-5,18260.4
现在是:WP-5,18260.4
现在是:WP-5,18260.4
现在是:WP-3,17568.2
现在是:WP-3,17568.2
现在是:WP-3,17568.2
现在是:WP-3,17568.2
现在是:WP-3,17568.2
还有Rlock,可以进行多重锁,
对于锁忘记释放,也可以是哟个位置参数进行防止
with self.lock:
import random
import time
from multiprocessing.pool import Pool from multiprocessing.process import current_process def run(file_name,num):
"""
进程执行的业务逻辑
往文件中写入数据
:param file_name:
:param num:
:return:
"""
with open(file_name,"a+",encoding="utf-8") as f:
#当前进程
now_process = current_process()
content = "{0} --{1} --{3}".format(
now_process.name,
now_process.pid,
num
)
f.write(content)
f.write("\n")
#写完随机休息1-5秒
time.sleep(random.randint(1,5))
print(content)
return "ok" if __name__ == "__main__":
file_name = "test_pool.txt"
#进程池
pool = Pool(2)
for i in range(20):
rest = pool.apply(run,args=(file_name,i))
print("{0}---{1}".format(i,rest)) pool.close()
pool.join()
python17进程的更多相关文章
- Python17个常用内置模块总结
Python17个常用内置模块总结 1.getpass 2.os 3.sys 4.subprocess 5.hashlib 6.json 7.pickle 8.shutil 9.time 10.dat ...
- 故障重现, JAVA进程内存不够时突然挂掉模拟
背景,服务器上的一个JAVA服务进程突然挂掉,查看产生了崩溃日志,如下: # Set larger code cache with -XX:ReservedCodeCacheSize= # This ...
- 死磕内存篇 --- JAVA进程和linux内存间的大小关系
运行个JAVA 用sleep去hold住 package org.hjb.test; public class TestOnly { public static void main(String[] ...
- 使用Monit监控本地进程
目前用它监控某些服务,失败自动重启,同时监控特定的日志文件,如果有变化,就发邮件报警 安装不细写了,网上好多 我先用cat /proc/version看了下我的系统是el6的,于是wget http: ...
- [APUE]进程控制(上)
一.进程标识 进程ID 0是调度进程,常常被称为交换进程(swapper).该进程并不执行任何磁盘上的程序--它是内核的一部分,因此也被称为系统进程.进程ID 1是init进程,在自举(bootstr ...
- [APUE]UNIX进程的环境(下)
一.共享库 共享库使得可执行文件中不再需要包含常用的库函数,而只需在所有进程都可存取的存储区中保存这种库例程的一个副本.程序第一次执行的时候或第一次调用某个库函数的时候,用动态链接方法将程序与共享库函 ...
- Tomcat shutdown执行后无法退出进程问题排查及解决
问题定位及排查 上周无意中调试程序在Linux上ps -ef|grep tomcat发现有许多tomcat的进程,当时因为没有影响系统运行就没当回事.而且我内心总觉得这可能是tomcat像nginx一 ...
- 查看w3wp进程占用的内存及.NET内存泄露,死锁分析
一 基础知识 在分析之前,先上一张图: 从上面可以看到,这个w3wp进程占用了376M内存,启动了54个线程. 在使用windbg查看之前,看到的进程含有 *32 字样,意思是在64位机器上已32位方 ...
- 探索ASP.NET MVC5系列之~~~6.Session篇(进程外Session)
其实任何资料里面的任何知识点都无所谓,都是不重要的,重要的是学习方法,自行摸索的过程(不妥之处欢迎指正) 汇总:http://www.cnblogs.com/dunitian/p/4822808.ht ...
随机推荐
- UltraSoft - Beta - Scrum Meeting 4
Date: May 20th, 2020. Scrum 情况汇报 进度情况 组员 负责 今日进度 q2l PM.后端 完成了课程中心对课程提醒的爬虫 Liuzh 前端 修改DDL列表中起始时间为课程名 ...
- Nginx高效核心
Nginx高效核心 目录 Nginx高效核心 Introduction I/O特性 同步/异步 阻塞/非阻塞 常见的I/O模型 阻塞型 非阻塞型 多路复用模型(多路阻塞) 信号驱动模型 异步模型 Ng ...
- 使用cerebro可视化ElasticSearch集群信息
使用cerebro可视化ElasticSearch集群信息 一.背景 二.安装步骤 1.下载并解压 2.配置cerebro 3.启动 cerebro 4.启动界面 三.注意事项 四.参考文档 一.背景 ...
- 简说各种wifi无线协议的传输速率
简说各种wifi无线协议的传输速率 acwifi.net 发布于 2016-10-26 分类:路由器评测 阅读(59953) 评论(1) 802.11ad 60G无线传输,这是未来的方向,先不谈这个. ...
- 大牛针对零基础入门c语言详解指针(超详细)
C语言指针说难不难但是说容易又是最容易出错的地方,因此不管是你要做什么只要用到C指针你就跳不过,今天咱们就以 十九个例子来给大家简单的分析一下指针的应用,最后会有C语言视频资料提供给大家更加深入的参考 ...
- n阶行列式计算
1.化为上下三角 该类型的矩阵.行列式在之前写过(https://www.cnblogs.com/wangzheming35/p/12906624.html),也建议记住这个行列式的结论. 当然不仅仅 ...
- LCA-离线tarjan模板
/* *算法引入: *树上两点的最近公共祖先; *对于有根树的两个结点u,v,最近公共祖先LCA(T,u,v)表示一个结点x,满足x是u,v的祖先且x的深度尽可能大; *对于x来说,从u到v的路径一定 ...
- Windows7下面手把手教你安装Django - Hongten
我所使用的操作系统是Windows7,内存是2G 在搜索了一些资料发现,对于Django的安装,详细的真的很少,都说的很简化,然而,这篇blog可以手把手教你成功安装Django 对于Django的详 ...
- 【Go语言学习笔记】Go的函数
函数还是这几块: 参数 返回值 作用域 执行顺序 参数和返回值 func FuncName(/*参数列表*/) (o1 type1, o2 type2/*返回类型*/) { //函数体 return ...
- 字符串可以这样加索引,你知吗?《死磕MySQL系列 七》
系列文章 三.MySQL强人"锁"难<死磕MySQL系列 三> 四.S 锁与 X 锁的爱恨情仇<死磕MySQL系列 四> 五.如何选择普通索引和唯一索引&l ...