from functools import  partial
from multiprocessing import Pool as ThreadPool
pageurls=[]
if maxpage:
for page in range(2, maxpage + 1):
pageurl = url + '&page=%s#mSearch' % page
pageurls.append(pageurl)
with ThreadPool() as pool:
results = pool.map(partial(get_one_page,level1=level1,level2=level2,level3=level3,name=name),pageurls) def get_one_page(pageurl,level1,level2,level3,name):
print("正在爬取的url", pageurl)
p_list = parser_md_index(pageurl)
for p in p_list:
product_url, img, p_br, p_name, p_price, old_price = p['product_url'], p['img'], p['p_br'], p[
'p_name'], p['p_price'], p['old_price']
product_with(level1, level2, level3, name, p_br, p_name, p_price, old_price, product_url, img)
name = re.sub('\"', '\'', name)
p_name = re.sub('\"', '\'', p_name)
sql = 'INSERT INTO modern_product (level1,level2,level3,level4,p_br,p_name,p_price,old_price,product_url,img) VALUES ("{}","{}","{}","{}","{}","{}","{}","{}","{}","{}")'.format(
level1, level2, level3, name, p_br, p_name, p_price, old_price, product_url, img)
cur.execute(sql)
conn.commit()

multiprocessing 用的最多的是pool.map,类似的还有pool.map_async这个是异步的,这两个需要传递的参数不同,另外python3不建议使用pool.apply了,具体我不很清楚自己查。

简单解释下上面代码用的参数,其中partial是一个偏函数,关于它的用法参照(我看着挺全的):https://blog.csdn.net/appleyk/article/details/77609114

pool.map(partial(get_one_page,level1=level1,level2=level2,level3=level3,name=name),pageurls)

上面这句核心部分,在理解这句之前你需要知道什么是偏函数,什么是迭代类型参数,map是如何工作

poo.map() 传递的是两个参数第一个参数是一个函数名(不带()),第二个参数是个迭代对象。

一般情况第二个参数,传入一个迭代就够用了。

但是我这个就比较牛逼了,需要传入一个列表和几个字符串给get_one_page函数

最好使用关键字参数和函数的参数一一对应起来。

pool.map(partial(get_one_page,level1=level1,level2=level2,level3=level3,name=name),pageurls)的level1,level2,level3,name

get_one_page(pageurl,level1,level2,level3,name)的level1,level2,level3,name就是level1,level2,level3,name几个参数=后面的值,为了好理解我们可以改成下面这样。

pool.map(partial(get_one_page,a=level1,b=level2,c=level3,d=name),pageurls)

get_one_page(pageurl,a,b,c,d)

好了 这样就懂了吧。

我也很菜 哪地方不对的请大家多多指点。

												

pool.map的第二个参数想传入多个咋整?的更多相关文章

  1. useEffect传入第二个参数陷入死循环

    最近新项目刚上手,就用了react的hooks,之前也看过hooks的不少文章,只是还没实战实战. 业务场景1:需要在页面一开始时得到一个接口的返回值,取调用另一个接口. 我的思路是,先设置这个接口的 ...

  2. js replace方法第二个参数,远不止你想的那么强大

    js replace() 方法,想必大家都不陌生. 定义和用法: replace()方法用于在字符串中用一些字符替换另一些字符,或者替换一个与正则表达式匹配的子串. stringObject.repl ...

  3. 关于字符串replace方法第二个参数探究

    网上有关replace的文章很多了,这里主要聊聊它的第二个参数.阅读本文需要对replace方法有一定了解.W3school=>replace 我们要把一段字符串中的某些指定字符替换掉,第一时间 ...

  4. python3.x pool.map方法的实质

    我使用多进程的一般方式,都是multiprocessing模块中的Pool.map()方法.下面写一个简单的示例和解析.至于此种方法使用多进程的效率问题,还希望大佬予以指正. 示例: "&q ...

  5. lavavel 定时任务 (command的第二个参数)

    之前好像没有写过,记录一下 $schedule->command()方法 第一个参数不用说,可以传纯字符串或者类::class,不过第二个参数确很少人提到 /** * Add a new Art ...

  6. 关于replace()方法中第二个参数的转义问题

    如果你想通过Javascript代码在网页中呈现 \ 字符,则在JS代码中你必须输入两个反斜杠 \\,否则会报错.比如: var a = "\"; alert(a); //chro ...

  7. 深度学习原理与框架-Alexnet(迁移学习代码) 1.sys.argv[1:](控制台输入的参数获取第二个参数开始) 2.tf.split(对数据进行切分操作) 3.tf.concat(对数据进行合并操作) 4.tf.variable_scope(指定w的使用范围) 5.tf.get_variable(构造和获得参数) 6.np.load(加载.npy文件)

    1. sys.argv[1:]  # 在控制台进行参数的输入时,只使用第二个参数以后的数据 参数说明:控制台的输入:python test.py what, 使用sys.argv[1:],那么将获得w ...

  8. java实验三——求平均数,数组排序(有关java保留小数位数,由于编译器版本未到1.5导致的报错format函数第二个参数不对,要求是Object[])

    package hello; import java.util.Arrays; public class 实验三更正版 { public static void main(String[] args) ...

  9. getAttribute()方法的第二个参数

    对于一个img元素,我们想获取它的src属性时可以有两种方式: 1.xxx.getAttribute("src") 2.直接通过xxx.src获取属性值 在src的属性值为相对路径 ...

随机推荐

  1. 剑指offer-调整数组顺序使奇数位于偶数前面13

    题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变. class Solu ...

  2. Django,Celery, rabbitmq

    学习Django 2 by Example书中的456页,运行 celery -A myshop worker -l info 报错.虽然特别指定了Celery的版本,也没用.之前使用的是标准安装:下 ...

  3. 在 C/C++ 中使用 TensorFlow 预训练好的模型—— 直接调用 C++ 接口实现

    现在的深度学习框架一般都是基于 Python 来实现,构建.训练.保存和调用模型都可以很容易地在 Python 下完成.但有时候,我们在实际应用这些模型的时候可能需要在其他编程语言下进行,本文将通过直 ...

  4. 【虚拟货币钱包】从 BIP32、BIP39、BIP44 到 Ethereum HD Wallet

    干货 | [虚拟货币钱包]从 BIP32.BIP39.BIP44 到 Ethereum HD Wallet {{uploading-image-882090.png(uploading...)}}

  5. NodeJs命令行新建项目实例

    安装Nodejs: 下载地址:http://nodejs.org/download/ 设置环境变量,例如我将nodejs装在D:/program文件夹下,则设以下为系统环境变量 D:\Program\ ...

  6. Mybatis学习系列(四)Mapper接口动态代理

    实现原理及规范 Mapper接口动态代理的方式需要手动编写Mapper接口,Mybatis框架将根据接口定义创建接口的动态代理对象,代理对象的方法体实现Mapper接口中定义的方法. 使用Mapper ...

  7. web四则运算

    目录 1.coding.net地址 2.PSP 3.Information Hiding, Interface Design, Loose Coupling 4.计算模块接口的设计与实现过程 5.计算 ...

  8. web相关基础知识3

    一 .浮动布局   ★元素浮动之后不占据原来的位置,脱离标准流 ★浮动的盒子在一行上显示 ★行内元素浮动之后转换为行内块元素.(不推荐使用,会脱离标准流,转行内元素最好使用display: inlin ...

  9. 解决Linux下启动Tomcat遇到Neither the JAVA_HOME ...报错

    解决Linux下启动Tomcat遇到Neither the JAVA_HOME ...报错 Neither the JAVA_HOME nor the JRE_HOME environment var ...

  10. SQL Server Profiler的简单使用,方便查找和发现SQL执行的效率和语句问题

    1 打开Server Profiler 2 去掉不必要的干扰,数据库的连接和断开之类的 3. 选择“显示所有列”,之后在列表中,勾选“DatabaseName”项. 4设置筛选器,这里设置只是过滤数据 ...