#1、server端跟多个client端聊天:
#异步操作,主进程负责接收client的连接,子进程负责跟client聊天。
#每接收一个连接,就创建一个子进程,子进程之间的数据是隔离的,互不影响,所以server端可以跟多个client端聊天。
#server:
import socket
from multiprocessing import Process def talk(conn): #子进程
conn.send(b'hello client')
ret = conn.recv(1024).decode('utf-8')
print(ret)
conn.close() # conn.close()放在这里是为了让每一个连接都关闭,如果放在外面就只能关闭最后一个连接。 if __name__ == '__main__':
sk = socket.socket()
sk.bind(('127.0.0.1',8080))
sk.listen()
while True: #如果没有循环,下面的代码只运行一次,只能跟一个client连接。
conn,addr = sk.accept() #client一运行就连接上server,server接收连接。
p = Process(target=talk,args=(conn,))
p.start() #开启子进程 sk.close() #如果sk.close()放在talk的里面,第一个连接聊完天之后就关闭了整个通信,后面的连接都无法通信,所以必须放在外面。 #client:
import socket
sk = socket.socket()
sk.connect(('127.0.0.1',8080))
ret = sk.recv(1024).decode('utf-8')
print(ret)
msg = input('client:')
sk.send(msg.encode('utf-8'))
sk.close() #2、守护进程daemon:随着主进程的结束而结束。如果不设置守护进程,当主进程执行完之后,子进程会一直不停止地打印&&&。
from multiprocessing import Process
import time
def func():
while True:
time.sleep(1) #设置睡眠1秒是为了看效果。
print('&&&') if __name__ == '__main__':
p = Process(target=func)
p.daemon = True #把子进程设置为守护进程,守护进程要在start之前设置。
p.start()
for i in range(100):
time.sleep(0.1) #设置睡眠0.1秒是为了看效果。
print('*'*i) #3、进程的其他方法:is_alive、terminate
#p.is_alive() 是否活着,结果是布尔类型,True表示进程还在,False表示进程不在。
#p.terminate() 结束进程。
from multiprocessing import Process
import time
def func():
print('qqqqq') if __name__ == '__main__':
p = Process(target=func)
p.start()
print(p.is_alive()) #True
p.terminate() #结束子进程
time.sleep(1) #主进程阻塞,系统调度子进程执行。否则下面代码的结果还是True,因为子进程还没被调度。
print(p.is_alive()) #False,当子进程执行之后,因为上面代码结束子进程,所以结果是False。
# True
# False #4、属性:进程名:name,进程id:pid,Process类里面有self.name和self.pid属性:
from multiprocessing import Process
def func():
print('qqq') if __name__ == '__main__':
p = Process(target=func)
p.start()
print(p.name,p.pid)
# Process-1 18696
# qqq from multiprocessing import Process
class MyProcess(Process):
def run(self):
print('子进程',self.name,self.pid) if __name__ == '__main__':
p = MyProcess()
p.start()
# 子进程 MyProcess-1 12488

day36-进程操作实例,守护进程,方法,属性的更多相关文章

  1. python开发 *进程数据隔离.守护进程,进程同步工具 * 180725

    进程数据隔离.守护进程,进程同步工具 一.进程之间的数据隔离: from multiprocessing import Process n=100 #主程序中变量n= def func(): glob ...

  2. Linux进程托管与守护进程设置

    引言 在上一篇<Linux启动之旅>中,我们了解了Linux启动过程,在该过程的最后一步,init进程拉起/etc/init.d/rcN.d/目录下指定的守护进程(daemon).假若自定 ...

  3. Python 之并发编程之进程中(守护进程(daemon)、锁(Lock)、Semaphore(信号量))

    五:守护进程 正常情况下,主进程默认等待子进程调用结束之后再结束守护进程在主进程所有代码执行完毕之后,自动终止kill -9 进程号 杀死进程.守护进程的语法:进程对象.daemon = True设置 ...

  4. (七) 一起学 Unix 环境高级编程(APUE) 之 进程关系 和 守护进程

    . . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...

  5. Linux进程实践(5) --守护进程

    概述 守护进程是在需要在后台长期运行不受终端控制的进程,通常情况下守护进程在系统启动时自动运行,在服务器关闭的时候自动关闭:守护进程的名称通常以d结尾,比如sshd.xinetd.crond.atd等 ...

  6. Linux 进程(二):进程关系及其守护进程

    进程关系 进程组 进程组是一个或多个进程的集合.通常,它们是在同一作业中结合起来的,同一进程组中的各进程接收来自同一终端的各种信号,每个进程组有一个唯一的进程组ID.每个进程组有一个组长进程,该组长进 ...

  7. 二十三、Linux 进程与信号---进程链和进程扇、守护进程和孤儿进程以及僵尸进程

    23.1 进程链和进程扇 23.1.1 概念 进程链:一个父进程构建出一个子进程,子进程再构建出子子进程,子子进程构建出子子子进程.... 这种就为进程链 进程扇:一个父进程构建出多个子进程,子进程都 ...

  8. linux 进程通信之 守护进程

    守护进程(Daemon) Daemon(精灵)进程,是linux中的后台服务进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的时间.一般采用以d结尾的名字.从下面的进程信息可以看出, ...

  9. daemon_init函数:调用该函数把普通进程转变为守护进程

    #include <unistd.h> #include <syslog.h> #include <fcntl.h> #include <signal.h&g ...

随机推荐

  1. HashMap核心功能源码浅析

    1.引子 "HashMap"由“hash”和“map"两个单词组成,这里的”map"表示“映射”而不是“地图”的意思,两个单词连起来就是“哈希映射表”.Map是 ...

  2. NumPy - 数组(定义,拼接)

    NumPy 教程(数组) set_printoptions(threshold='nan') NumPy的数组中比较重要ndarray对象属性有: ndarray.ndim:数组的维数(即数组轴的个数 ...

  3. linux 安装禅道 和 CentOS 7 开放防火墙端口 命令

    linux 安装禅道链接:  https://www.cnblogs.com/maohuidong/p/9750202.html CentOS 7 开放防火墙端口 命令 链接:https://www. ...

  4. mysql时间类型总结及常用时间函数

    日期时间和类型 常用日期和时间类型 字节 year                1       表示年份                   值范围:(1901----2155) date     ...

  5. HttpClient系列~StringContent与FormUrlEncodedContent

    知识点 本文是一个很另类的文章,在项目中用的比较少,但如果项目中真的出现了这种情况,我们也需要知道如何去解决,对于知识点StringContent和FormUrlEncodedContent我们应该了 ...

  6. cmd 进入指定文件夹

    1.通常情况下,我们要进入其他盘符下的任意目录,需要在CMD窗口运行两次命令:第一次,进入盘符,第二次进入指定目录 #进入D盘 d: #进入D盘下的anaconda目录 cd anacond 2.通过 ...

  7. Linux相关笔记

    vim下 r /etc/hosts  会把这个文件读进来 r! df -Th  会把执行的内容读取进来 查找 /  ? 替换:s/old/new/g 2到9行替换2,9s/old/new/g 全部替换 ...

  8. h5-语义化标签的兼容性问题

    1.html代码 <header>头</header> <nav>导航栏</nav> <main> <article>左< ...

  9. Python笔记_第一篇_面向过程_第一部分_5.Python数据类型之数字类型(number)

    Python 数字类型(number)用于存储数值.数据类型是不允许改变的,这就意味着如果改变number数据类型的值,将重新分配内存空间. 1.   一个简单的示例: # 以下实例在变量赋值时数字类 ...

  10. ArrayList集合存储VO封装对象后调用的问题

    VO代码: public class VO4Blog { private int b_id; private int b_typeid; private String b_title; private ...