美文网首页
多线程多进程线程池进程池

多线程多进程线程池进程池

作者: 魔曦帝天 | 来源:发表于2019-11-17 16:00 被阅读0次
import multiprocessing
import threading
import time

def job(m, n):
    print('hello world', m, n)
    time.sleep(10)

t1 = threading.Thread(target=job,args=(1,2)) # 多线程
t1.start()
t1.join()
p1 = multiprocessing.Process(target=job,args=(3,4)) # 多进程
p1.start()
p1.join()

#  线程池和进程池
import time
from concurrent.futures import ThreadPoolExecutor, ProcessPoolExecutor

def job(i):
    print('hello world', i)
    time.sleep(10)

tp = ProcessPoolExecutor(max_workers=50)

for i in range(30):
    tp.submit(job, i)

利用并发处理来自客户端的请求,

server端

线程池处理请求

import sys
import socket
from concurrent.futures import ThreadPoolExecutor, ProcessPoolExecutor
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
server.bind(('', 9091))

server.listen(5)


def run(conn):
    while True:
        data = conn.recv(1024)
        if not data:
            break
        conn.send(data.upper())
    conn.close()

ti = ThreadPoolExecutor(max_workers=10)
while True:
    conn, dir = server.accept()
    print(conn, dir)
    ti.submit(run(conn))

多线程处理请求

import threading
import sys
reload(sys)
sys.setdefaultencoding('utf8')
import socket
# 建立一个服务端
server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
server.bind(('',9091)) #绑定要监听的端口
server.listen(5) #开始监听 表示可以使用五个链接排队

def run(conn):
   while True:
       data = conn.recv(1024)
       if not data:break
       conn.send(data.upper())
   conn.close()

while True:# conn就是客户端链接过来而在服务端为期生成的一个链接实例
    conn,addr = server.accept() #等待链接,多个链接的时候就会出现问题,其实返回了两个值
    print(conn,addr)
    t1 = threading.Thread(target=run, args=(conn,))
    t1.start()

telnet 10.0.122.156 9091

相关文章

网友评论

      本文标题:多线程多进程线程池进程池

      本文链接:https://www.haomeiwen.com/subject/dxppictx.html