python raise valueerror_请教:Python多进程编程时出现raise ValueError("Pool not running") 为什么?。...

问题描述

我在进行多线程编程时使用如下方代码,当输入一般print()等简单函数时均正常,

但是一旦为调用我自己的函数时运行就会出现 : raise ValueError(“Pool not running”) ValueError: Pool not running

问题出现的环境背景及自己尝试过哪些方法

我是在做爬虫,想用多进程增加效率 多进程的Func里放的是取页面ID的函数

我在网上查找时有说是pool.close(),pool.join()缩进的原因,但是我试过好像还是没解决。

而且已知我的main函数有两个for循环,当我的缩进为最外层循环时,程序不是被join()阻塞等待运行完成,而是会继续生成进程运行程序,生成数会超过我的Pool=5的最大限制。

对多进程编程还是初学,希望能够有遇见过的指点一下。谢谢!

相关代码

// 请把代码文本粘贴到下方(请勿用图片代替代码)

def getPageId(jobname,joburl):

print('程序启动')

db = pymysql.connect(host='localhost', port=3306, user='root', passwd='', db='test', charset='utf8')

cursor = db.cursor()

url = 'https://www.lagou.com/jobs/positionAjax.json?'

PageId = []

proxeys = RdProxeys()

n = 0

print(jobname)

# for i in range(len(jobname)):

for j in range(1, 31): # 每页固定页数:30

datas['pn'] = j

# datas['kd'] = jobname[i]

datas['kd'] = jobname

# 设置防盗链

# headers1['Referer'] = parse.quote(joburl[i])

headers1['Referer'] = parse.quote(joburl)

print(datas)

rdtime = random.randint(3, 10)

print('sleep ' + str(rdtime) + ' sec')

time.sleep(rdtime)

print(proxeys)

req = requests.post(url, headers=headers1, data=datas, proxies=proxeys)

# print(type(req.json()['success']))

if req.json()['success'] is bool('true'):

# print(req.text)

n = n + 1

content = req.json()['content']['hrInfoMap']

# print(content)

for key in content.keys():

# print(key)

PageId.append(key)

else:

print(req.json())

if n < 5:

DelProxeys(proxeys['http'])

proxeys = RdProxeys()

n = 0

time.sleep(10)

cntsql = 'select count(proxeys_body) from proxeys'

cursor.execute(cntsql)

(cnt,) = cursor.fetchone()

while int(str(cnt)) < 20:

time.sleep(300)

cursor.execute(cntsql)

(cnt,) = cursor.fetchone()

else:

proxeys = RdProxeys()

n = 0

time.sleep(10)

print('-----------------Error, The Pn is ' + str(j) + '----------------------')

with open('E:\\vscode_work\\CareerPython\\Lagou\' + 'PageId_log' + '.txt', 'a') as f:

f.write(str(j)+','+jobname[i]+','+joburl[i]+'\n')

pass

# print(PageId)

with open('E:\\vscode_work\\CareerPython\\Lagou\' + 'PageId' + '.txt', 'a') as f:

f.write(str(PageId))

print('当前共记录数据' + str(len(PageId)))

def main():

pool = Pool(processes=5)   # set the processes max number 3

for i in range(0, len(data()[0])):

for j in range(0,len(data()[0][i]))

pool.apply_async(getPageId, (data()[0][i][j], data()[1][i][j]))

pool.close()

pool.join()

if name == “__main__”:

main()

你期待的结果是什么?实际看到的错误信息又是什么?

我将数据分组为5个一组输入 getpageid方法,期待能够实现5个进程并行运行程序,一组数据完了以后for循环驱动下一组数据输入继续运行。

结果总是发起5个进程后就出现raise ValueError(“Pool not running”) ValueError: Pool not running

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值