最近打比赛,apply操作极慢,队友使用了线程池,用多核开辟多线程跑,加速。

在阿里平台上,都没问题。

我是win10系统+jupyter notebook

多线程那个模块运行,会显示一直运行,p.close()会被卡死

from multiprocessing import Pool
def df_cut_word(data, c):
data[c] = data[c].map(lambda x: ' '.join(jieba.cut(x)))
return data[[c]] processor = 12
list_seg = ["prefix", "title", "text0", "text1", "text2", "text3", "text4", "text5", "text6", "text7", "text8",
"text9"]
cut_word_args = list_seg
p = Pool(processor)
res = [] for i in range(len(cut_word_args)):
print(cut_word_args[i])
res.append(
p.apply_async(df_cut_word, args=(
data[[cut_word_args[i]]], cut_word_args[i]))
)
print(str(i) + ' processor started !') p.close()
p.join() res = [item.get() for item in res]
res = pd.concat(res, axis=1) print(res.columns) data = data[[c for c in data.columns if c not in res.columns]]
data = pd.concat([data, res], axis=1)

这是linux的写法

在Windows上要想使用进程模块,就必须把有关进程的代码写在当前.py文件的if __name__ == ‘__main__’ :语句的下面,才能正常使用Windows下的进程模块。Unix/Linux下则不需要。

改为:

from multiprocessing import Pool
def df_cut_word(data, c):
data[c] = data[c].map(lambda x: ' '.join(jieba.cut(x)))
return data[[c]]
list_seg = ["prefix", "title", "text0", "text1", "text2", "text3", "text4", "text5", "text6", "text7", "text8",
"text9"] if __name__=='__main__':
processor = 2
cut_word_args = list_seg
p = Pool(processor)
res = []
for i in range(len(cut_word_args)):
print(cut_word_args[i])
res.append(
p.apply_async(df_cut_word, args=(
data[[cut_word_args[i]]], cut_word_args[i]))
)
print(str(i) + ' processor started !')
print('ok')
p.close()
p.join()

然而还是不行,后来搜到了

在Windows环境中,jupyter-notebook中,即使使用if __name__ == '__main__进行保护,也会出现runtime error,这个时候可以将jupyter中的代码下载成py脚本,直接运行脚本。

作为对比,Linux下运行的jupyter-notebook并不会。

windows python的多进程的更多相关文章

  1. 进程,线程,以及Python的多进程实例

    什么是进程,什么是线程? 进程与线程是包含关系,进程包含了线程. 进程是系统资源分配的最小单元,线程是系统任务执行的最小单元. 打个比方,打开word,word这个程序是一个进程,里面的拼写检查,字数 ...

  2. 进程与线程(2)- python实现多进程

    python 实现多进程 参考链接: https://morvanzhou.github.io/tutorials/python-basic/multiprocessing/ python中实现多进程 ...

  3. 【python】多进程锁multiprocess.Lock

    [python]多进程锁multiprocess.Lock 2013-09-13 13:48 11613人阅读 评论(2) 收藏 举报  分类: Python(38)  同步的方法基本与多线程相同. ...

  4. Python实现多进程

    Python可以实现多线程,但是因为Global Interpreter Lock (GIL),Python的多线程只能使用一个CPU内核,即一个时间只有一个线程在运行,多线程只是不同线程之间的切换, ...

  5. 『Python』多进程处理

    尝试学习python的多进程模组,对比多线程,大概的区别在: 1.多进程的处理速度更快 2.多进程的各个子进程之间交换数据很不方便 多进程调用方式 进程基本使用multicore() 进程池优化进程的 ...

  6. python 使用多进程实现并发编程/使用queue进行进程间数据交换

    import time import os import multiprocessing from multiprocessing import Queue, pool ""&qu ...

  7. Windows+Python+anaconda机器学习安装及环境配置步骤

    Windows+Python+anaconda机器学习安装及环境配置步骤 1. 下载安装python3.6以上版本(包含pip,不用自己安装)2. 直接下载安装pycharm安装包(用于编写pytho ...

  8. Python多线程多进程

    一.线程&进程 对于操作系统来说,一个任务就是一个进程(Process),比如打开一个浏览器就是启动一个浏览器进程,打开一个记事本就启动了一个记事本进程,打开两个记事本就启动了两个记事本进程, ...

  9. python中多进程+协程的使用以及为什么要用它

    前面讲了为什么python里推荐用多进程而不是多线程,但是多进程也有其自己的限制:相比线程更加笨重.切换耗时更长,并且在python的多进程下,进程数量不推荐超过CPU核心数(一个进程只有一个GIL, ...

随机推荐

  1. 第m大的身份证号码(局部排序代全局、结构体排序)

    第m大的身份证号码(点击) 时间限制: 1 Sec  内存限制: 128 MB                                                             ...

  2. MySQL——事务(Transaction)详解

    原文:https://blog.csdn.net/w_linux/article/details/79666086

  3. nslookup使用及常用命令

    nslookup是命令行里一个常用的DNS查询工具,最常用的功能是域名解析和反向解析. 下面罗列一些常用的nslookup命令 nslookup # 进入交互模式 >域名 # 进行正向解析 &g ...

  4. 【Laravel】 常用的artisan命令

    全局篇 查看artisan命令php artisanphp artisan list 查看某个帮助命令php artisan help make:model 查看laravel版本php artisa ...

  5. Web前端兼容性指南

    一.Web前端兼容性问题 一直以来,Web前端领域最大的问题就是兼容性问题,没有之一. 前端兼容性问题分三类: 浏览器兼容性 屏幕分辨率兼容性 跨平台兼容性 1.浏览器兼容性问题 第一次浏览器大战发生 ...

  6. RockeMQ安装与入门

    淘宝内部的交易系统使用了淘宝自主研发的Notify消息中间件,使用Mysql作为消息存储媒介,可完全水平扩容,为了进一步降低成本,淘宝开发团队认为存储部分可以进一步优化,2011年初,Linkin开源 ...

  7. RocketMQ入门到入土(一)新手也能看懂的原理和实战!

    学任何技术都是两步骤: 搭建环境 helloworld 我也不例外,直接搞起来. 一.RocketMQ的安装 1.文档 官方网站 http://rocketmq.apache.org GitHub h ...

  8. 平时自己常用的git指令

    增删改查 创建标签 $ git tag -a v1.4 -m 'my version 1.4' 用 -a (译注:取 annotated 的首字母)指定标签名字即可 -m 选项则指定了对应的标签说明 ...

  9. 01 . Shell详细入门介绍及简单应用

    Shell简介 Shell 是一个 C 语言编写的脚本语言,它是用户与 Linux 的桥梁,用户输入命令交给 Shell 解释处理Shell 将相应的操作传递给内核(Kernel),内核把处理的结果输 ...

  10. 【弹性碰撞问题】POJ 1852 Ants

    Description An army of ants walk on a horizontal pole of length l cm, each with a constant speed of ...