python在linux下使用多进程遇到3770问题解决方法
2017-08-16 18:09
876 查看
最近有工作要使用python启动多个脚本,用到了多进程,在windows下开发调试没有问题,但是到了linux上就出issue 3770的错了,这里记录一下问题和解决方案。
多进程代码:
报错trace:
解决方案: https://segmentfault.com/q/1010000002572919
以下是回答原文:
多进程代码:
from multiprocessing import Pool import os import time def __long_time_task(name): print('Run task %s (%s)...' % (name, os.getpid())) start = time.time() if name == 'dmp': os.system('python DmpresponseAccount.py') elif name == 'region': os.system('python RegionAccount.py') elif name == 'mix': os.system('python MixAccount.py') end = time.time() print('Task %s runs %0.2f seconds.' % (name, (end - start))) def startAllTask(): """ 启动所有数据统计任务 :return: """ print('Parent process %s.' % os.getpid()) process_list = ['dmp', 'region', 'mix'] # 利用进程池启动多个子进程 p = Pool(3) for a_process in process_list: p.apply_async(__long_time_task, args=(a_process,)) print('Waiting for all subprocesses done...') p.close() p.join() print('All subprocesses done.') if __name__ == '__main__': startAllTask()
报错trace:
$ python StartAllTask.py Parent process 15148. Traceback (most recent call last): File "StartAllTask.py", line 52, in <module> startAllTask() File "StartAllTask.py", line 42, in startAllTask p = Pool(4) File "/home/likexi/.jumbo/lib/python2.7/multiprocessing/__init__.py", line 232, in Pool return Pool(processes, initializer, initargs, maxtasksperchild) File "/home/likexi/.jumbo/lib/python2.7/multiprocessing/pool.py", line 115, in __init__ self._setup_queues() File "/home/likexi/.jumbo/lib/python2.7/multiprocessing/pool.py", line 209, in _setup_queues from .queues import SimpleQueue File "/home/likexi/.jumbo/lib/python2.7/multiprocessing/queues.py", line 48, in <module> from multiprocessing.synchronize import Lock, BoundedSemaphore, Semaphore, Condition File "/home/likexi/.jumbo/lib/python2.7/multiprocessing/synchronize.py", line 59, in <module> " function, see issue 3770.") ImportError: This platform lacks a functioning sem_open implementation, therefore, the required synchronization primitives needed will not function, see issue 3770.
解决方案: https://segmentfault.com/q/1010000002572919
以下是回答原文:
原因:没有挂载/dev/shm;python安装时需要写入东西,才能开启sem_open 解决办法:(需要root权限;以下命令root账号执行) 1. 修改/etc/fstab 增加:tmpfs /dev/shm tmpfs defaults 0 0 2. mount /dev/shm 3. chmod 777 /dev/shm 4. 重装python (必须重装,没办法,安装时检查该设备是否存在,存在则可以使用sem_open)
相关文章推荐
- linux Eclipse上c++调用使用了tensorflow库的python程序遇到的问题及解决方法
- 记录使用python时遇到的中文 编码问题与解决方法
- 使用密匙让putty(或ssh)自动登录Linux遇到几个问题的解决方法
- windows下安装python basemap时使用Visual Studio编译geos时遇到的问题以及解决方法
- Windows下使用python-nmap库可能遇到的问题及解决方法(续)
- 使用Python脚本实现批量网站存活检测遇到问题及解决方法
- Linux搭建python环境中cx_Oracle模块安装遇到的问题与解决方法
- Linux下使用Gradle编译Android工程时遇到的问题及解决方法
- Python2.5使用新浪微博Python SDK遇到的问题与解决方法
- 使用Python脚本实现批量网站存活检测遇到问题及解决方法
- Windows下使用python-nmap库可能遇到的问题及解决方法(续)
- linux安装他版本python时遇到的问题及解决方法
- Python结巴中文分词工具使用过程中遇到的问题及解决方法
- linux使用过程中遇到的问题和解决方法
- 嵌入式Linux开发实验中遇到的问题及解决方法
- J2ME使用WTK模拟器开发时候遇到“OK to use Airtime” 问题的解决方法
- linux下安装Subversion遇到关于BerkeleyDB问题及解决方法
- python中cx_Oracle模块安装遇到的问题与解决方法
- HOWTO install and setup Android NDK for Linux(Android NDK安装遇到的问题和解决方法)
- Linux下Sendmail慢卡问题的解决方法:dnscache配置使用全过程