一、进程

  1.进程间数据不共享

import multiprocessing
data_list = []
def task(arg):
data_list.append(arg)
print(data_list)
def run():
for i in range(10):
m = multiprocessing.Process(target=task,args=(i,))
m.start()
if __name__ == '__main__':
run()
# [0] #分别打印了一个列表
# [1]
# [2]
# [3]
# [4]
# [5]
# [6]
# [7]
# [8]
# [9]

  常用功能:

    join、deamon、name、multiprocessing.current_process()、multiprocessing.current_process().ident/pid

import time
import multiprocessing
def task(arg):
time.sleep(2)
print(arg)
def run():
print(1111111)
p1 = multiprocessing.Process(target=task,args=(1,))
p1.name = "pp1"
p1.start()
print(2222222) p2 = multiprocessing.Process(target=task,args=(2,))
p2.name = "pp2"
p2.start()
print(33333333)
if __name__ == "__main__":
run()

常用功能示例

  通过继承方式创建进程

class MyProcess(multiprocessing.Process):
def run(self):
print("当前进度",multiprocessing.Process)
def run():
p1 = MyProcess()
p1.start() p2 = MyProcess()
p2.start() if __name__ == '__main__':
run()

  2.进程间数据共享

Queue

  linux:

q = multiprocessing.Queue()
def task(arg,q):
q.put(arg)
def run():
for i in range(1,11):
p = multiprocessing.Process(target=task,args=(i,q))
p.start()
while 1:
v = q.get()
print(v)
if __name__ == '__main__':
run()

  windows:

def task(arg,q):
q.put(arg)
if __name__ == '__main__':
q = multiprocessing.Queue()
for i in range(10):
p = multiprocessing.Process(target=task,args=(i,q))
p.start()
while 1:
v = q.get()
print(v)

Manage

  linux:

m = multiprocessing.Manager()
dic = m.dict()
def task(arg):
dic[arg] = 100
def run():
for i in range(10):
p = multiprocessing.Process(target=task,args=(i,))
p.start()
input(">>>>>>")
print(dic.values())
if __name__ == '__main__':
run()

  windows:

def task(arg,dic):
dic[arg] = 100
def run():
m = multiprocessing.Manager()
dic = m.dict()
lis = []
for i in range(10):
p = multiprocessing.Process(target=task,args=(i,dic,))
p.start()
lis.append(p)
while 1:
count = 0
for p in lis:
if not p.is_alive():
count += 1
if count == len(lis):
break
print(dic)
if __name__ == '__main__':
run()

  3.进程锁:

    和线程锁种类用法一致

  4.进程池:

import time
from concurrent.futures import ProcessPoolExecutor
def task(arg):
time.sleep(2)
print(arg)
if __name__ == '__main__':
pool = ProcessPoolExecutor(5)
for i in range(10):
pool.submit(task,i)

  requests模块的简单爬虫

  安装:(cmd)

    pip3 install requests

    pip3 install beautifulsoup4

import requests
from bs4 import BeautifulSoup
from concurrent.futures import ThreadPoolExecutor,ProcessPoolExecutor
def task(url):
r1 = requests.get(url=url,headers={
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.92 Safari/537.36'
})
soup = BeautifulSoup(r1.text,"html.parser")
content_list = soup.find('div',attrs={'id':'content-list'})
for item in content_list.find_all('div',attrs={'class':'item'}):
title = item.find('a').text.strip()
target_url = item.find('a').get('href')
print(title,target_url)
def run():
pool = ThreadPoolExecutor(5)
for i in range(1,50):
pool.submit(task,'https://dig.chouti.com/all/hot/recent/%s' %i)
if __name__ == '__main__':
run()

  以上示例用多线程好

  requests模块模拟浏览器发送请求

    requests.get():

  线程和线程池

  

最新文章

  1. Velocity(1)——注释
  2. SQL Server中易混淆的数据类型
  3. jira插件带ui界面和几种方式
  4. 说说php取余运算(%)的那点事
  5. 关于tcp封装http协议
  6. Mysql插入内容过长(Packet for query is too large)
  7. 关于cas-client单点登录客户端拦截请求和忽略/排除不需要拦截的请求URL的问题(不需要修改任何代码,只需要一个配置)
  8. APP专业的开发公司都有这样一套开发流程,强烈建议收藏!
  9. Nagle 算法
  10. Should we ban guns 英语禁枪议论文
  11. 自增ID算法snowflake - C#版
  12. 系统信号(signal)与其他(定时器,退出清理等)
  13. 瀑布流之ajax
  14. golang 如何查看channel通道中未读数据的长度
  15. MySQL优化:explain using temporary
  16. 7-12 The Rotation Game IDA*
  17. JavaScript-Tool:moment-timezone.js
  18. jquery的animate()方法也可设置非css属性
  19. Spring 工作流程简单介绍
  20. KDTree(Bzoj2648: SJY摆棋子)

热门文章

  1. Linux下Mongodb安装和启动配置 转载
  2. 【转】mysql 存储过程的示例
  3. google浏览器插件fq教程
  4. BGP 实验
  5. bam文件格式说明
  6. Apache Flink SQL
  7. Echarts 不能百分比显示或显示有问题
  8. QT 设置程序图标
  9. 20191031:Python底层机制
  10. Python学习路线2019升级版(课程大纲+视频教程+网盘资源下载)