python实现真正的多线程
Python代码中有一个threading模块,可以创建多线程,但是在这种模式下创建的多线程并不能将多核利用起来,所有由这种模式下创建的线程最多只能共享一个CPU核,所以在有些场景下,需要将一个作业分配给一个独立的线程,并且每个独立的线程可以使用不同的CPU核资源,做到真正的并发执行。
如何实现呢?这里有两个办法
一.通过调用C函数库
C库函数
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>void* myThread(void *arg)
{while (1);
}void createThread(void)
{int err;pthread_t tid;err = pthread_create(&tid, NULL, myThread, NULL);if (err != 0) {printf("create thread failed!\n");return;}return;
}
编译成动态库:
$ gcc -fPIC -shared -o libfoo.so foo.c
在Python中调用,实现真正的多线程
代码如下:
#-*- coding=utf-8 -*-
from ctypes import *
import timelib = CDLL("./libfoo.so", RTLD_GLOBAL)
create_thread = lib.createThread
#create_thread.argtypes = [c_void]
#create_thread.restype = c_voidif __name__ == '__main__':create_thread()create_thread()while True:print 'I am in main thread!'time.sleep(2)
运行起来后,查看CPU占有率:
hank@hank-desktop:~/Study/Python/CallC2$ top
top - 10:33:27 up 2:06, 3 users, load average: 0.31, 0.08, 0.07
Tasks: 159 total, 1 running, 158 sleeping, 0 stopped, 0 zombie
%Cpu0 :100.0 us, 0.0 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu1 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu2 : 0.3 us, 0.0 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu3 :100.0 us, 0.0 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem: 8166744 total, 1696620 used, 6470124 free, 280708 buffers
KiB Swap: 0 total, 0 used, 0 free. 731816 cached MemPID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 2625 hank 20 0 51404 7616 4824 S 199.8 0.1 0:17.52 python 1035 daemon 20 0 517408 8136 7144 S 0.3 0.1 0:25.53 CodeMeterLin 2628 hank 20 0 29152 3324 2804 R 0.3 0.0 0:00.01 top
可以看到在C库中创建的两个线程(while无限循环)分别消耗掉了两个独立的CPU核,这也就验证了可以做到真正并发的目的。
python实现真正的多线程相关推荐
- Python 多进程开发与多线程开发
我们先来了解什么是进程? 程序并不能单独运行,只有将程序装载到内存中,系统为它分配资源才能运行,而这种执行的程序就称之为进程.程序和进程的区别就在于:程序是指令的集合,它是进程运行的静态描述文本:进程 ...
- 一行 Python 实现并行化 -- 日常多线程操作的新思路 - 左手键盘,右手书 - SegmentFault...
一行 Python 实现并行化 -- 日常多线程操作的新思路 - 左手键盘,右手书 - SegmentFault
- python paramiko并发_使用Python paramiko模块利用多线程实现ssh并发执行操作
1.paramiko概述 ssh是一个协议,OpenSSH是其中一个开源实现,paramiko是Python的一个库,实现了SSHv2协议(底层使用cryptography). 有了Paramiko以 ...
- delphi 多个线程 多个进度条_多线程有哪些优点?- Python每日3题(多线程专题)
这里是Python7编程挑战-多线程专题! 每天学习3个问题,包括初级,中级,高级问题各1个. 今天是第2天!一起来呀,就7天! 每日3题是麦叔的面试系列专题之一,每天包括初级,中级,高级难度题目各一 ...
- Python使用threading实现多线程
Python使用threading实现多线程 Python中多任务的实现可以使用进程,也可以使用线程. 一.线程介绍 进程是操作系统分配程序执行资源的单位,而线程是进程的一个实体,是CPU调度和分配资 ...
- python面试题之多线程好吗?列举一些让Python代码以并行方式运行的方法
答案 Python并不支持真正意义上的多线程.Python中提供了多线程包,但是如果你想通过多线程提高代码的速度,使用多线程包并不是个好主意.Python中有一个被称为Global Interpret ...
- 一行 Python 实现并行化 -- 日常多线程操作的新思路
Python 在程序并行化方面多少有些声名狼藉.撇开技术上的问题,例如线程的实现和 GIL1,我觉得错误的教学指导才是主要问题.常见的经典 Python 多线程.多进程教程多显得偏"重&qu ...
- 在python中单线程,多线程,多进程对CPU的利用率实测以及GIL原理分析
首先关于在python中单线程,多线程,多进程对cpu的利用率实测如下: 单线程,多线程,多进程测试代码使用死循环. 1)单线程: 2)多线程: 3)多进程: 查看cpu使用效率: 开始观察分别执行时 ...
- 转:使用Python写一个m3u8多线程下载器
转载:使用Python写一个m3u8多线程下载器 可去看原文:https://blog.csdn.net/muslim377287976/article/details/104340242 文章目录 ...
- python中使用tomorrow多线程时报错invalid syntax
python中使用tomorrow多线程时报错invalid syntax如何解决?具体报错信息如下: 解决方案: 需要点击打开tomorrow.py文件,把42行的async改个名称,因为async ...
最新文章
- 统一同一物理主机上VMware虚拟出的不同操作系统如何通信
- java 编写线程公共类_002-java多线程工具类
- Python 3 教程二:文件,目录和路径
- C#串口上位机软件--IOT串口调试精灵
- java wmi_WMI依赖服务使用WMI查询
- LeetCode 374. 猜数字大小(二分查找)
- java nodefilter类,Java Servlet Filter过滤器概述
- 新书推荐:可爱的Python
- CodeForces - 988D(思维STL)
- 时钟周期,机器周期(cpu周期),指令周期,存储周期,总线周期
- 使用FontCreator工具创建字体符号导入arcmap
- 跨期套利模型 2017-2019年白银跨期实盘年化7%-15%策略 策略开发
- Centos7.5安装redis
- 网络游戏制作---坦克大战(1)
- Oracle 19c遇到ORA-XXXX:????的问题的解决方案
- 传奇单职业1.76御天战神强势来袭
- HTML+CSS第十课:常见的3种网页布局方式:表格布局、DIV+CSS布局、框架布局
- PHP——get和post请求他人接口
- 小米平板1刷dot9-dot7
- 强网杯2019逆向 lebel:WASM,XTEA
热门文章
- android 适配红米,小米MIUI放出Android Q适配计划,11款手机参与,包括红米Note 7
- python居然还能画出这么精美的魔法少女,惊我一整年
- 数据挖掘算法——常用分类算法总结
- android证书在线生成方法
- 2019年6月4日 VIVO提前批笔试 题目3
- html5 高度 满屏,HTML5 全屏特性
- 【Android】Studio 依赖 ButterKnife 黄油刀 时出现 空指针异常
- java 兑换码生成_java生成兑换码礼包码--工具类
- k8s+docker实战(长篇)
- python+matplotlib绘图线条类型、颜色、散点类型