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实现真正的多线程相关推荐

  1. Python 多进程开发与多线程开发

    我们先来了解什么是进程? 程序并不能单独运行,只有将程序装载到内存中,系统为它分配资源才能运行,而这种执行的程序就称之为进程.程序和进程的区别就在于:程序是指令的集合,它是进程运行的静态描述文本:进程 ...

  2. 一行 Python 实现并行化 -- 日常多线程操作的新思路 - 左手键盘,右手书 - SegmentFault...

    一行 Python 实现并行化 -- 日常多线程操作的新思路 - 左手键盘,右手书 - SegmentFault

  3. python paramiko并发_使用Python paramiko模块利用多线程实现ssh并发执行操作

    1.paramiko概述 ssh是一个协议,OpenSSH是其中一个开源实现,paramiko是Python的一个库,实现了SSHv2协议(底层使用cryptography). 有了Paramiko以 ...

  4. delphi 多个线程 多个进度条_多线程有哪些优点?- Python每日3题(多线程专题)

    这里是Python7编程挑战-多线程专题! 每天学习3个问题,包括初级,中级,高级问题各1个. 今天是第2天!一起来呀,就7天! 每日3题是麦叔的面试系列专题之一,每天包括初级,中级,高级难度题目各一 ...

  5. Python使用threading实现多线程

    Python使用threading实现多线程 Python中多任务的实现可以使用进程,也可以使用线程. 一.线程介绍 进程是操作系统分配程序执行资源的单位,而线程是进程的一个实体,是CPU调度和分配资 ...

  6. python面试题之多线程好吗?列举一些让Python代码以并行方式运行的方法

    答案 Python并不支持真正意义上的多线程.Python中提供了多线程包,但是如果你想通过多线程提高代码的速度,使用多线程包并不是个好主意.Python中有一个被称为Global Interpret ...

  7. 一行 Python 实现并行化 -- 日常多线程操作的新思路

    Python 在程序并行化方面多少有些声名狼藉.撇开技术上的问题,例如线程的实现和 GIL1,我觉得错误的教学指导才是主要问题.常见的经典 Python 多线程.多进程教程多显得偏"重&qu ...

  8. 在python中单线程,多线程,多进程对CPU的利用率实测以及GIL原理分析

    首先关于在python中单线程,多线程,多进程对cpu的利用率实测如下: 单线程,多线程,多进程测试代码使用死循环. 1)单线程: 2)多线程: 3)多进程: 查看cpu使用效率: 开始观察分别执行时 ...

  9. 转:使用Python写一个m3u8多线程下载器

    转载:使用Python写一个m3u8多线程下载器 可去看原文:https://blog.csdn.net/muslim377287976/article/details/104340242 文章目录 ...

  10. python中使用tomorrow多线程时报错invalid syntax

    python中使用tomorrow多线程时报错invalid syntax如何解决?具体报错信息如下: 解决方案: 需要点击打开tomorrow.py文件,把42行的async改个名称,因为async ...

最新文章

  1. 统一同一物理主机上VMware虚拟出的不同操作系统如何通信
  2. java 编写线程公共类_002-java多线程工具类
  3. Python 3 教程二:文件,目录和路径
  4. C#串口上位机软件--IOT串口调试精灵
  5. java wmi_WMI依赖服务使用WMI查询
  6. LeetCode 374. 猜数字大小(二分查找)
  7. java nodefilter类,Java Servlet Filter过滤器概述
  8. 新书推荐:可爱的Python
  9. CodeForces - 988D(思维STL)
  10. 时钟周期,机器周期(cpu周期),指令周期,存储周期,总线周期
  11. 使用FontCreator工具创建字体符号导入arcmap
  12. 跨期套利模型 2017-2019年白银跨期实盘年化7%-15%策略 策略开发
  13. Centos7.5安装redis
  14. 网络游戏制作---坦克大战(1)
  15. Oracle 19c遇到ORA-XXXX:????的问题的解决方案
  16. 传奇单职业1.76御天战神强势来袭
  17. HTML+CSS第十课:常见的3种网页布局方式:表格布局、DIV+CSS布局、框架布局
  18. PHP——get和post请求他人接口
  19. 小米平板1刷dot9-dot7
  20. 强网杯2019逆向 lebel:WASM,XTEA

热门文章

  1. android 适配红米,小米MIUI放出Android Q适配计划,11款手机参与,包括红米Note 7
  2. python居然还能画出这么精美的魔法少女,惊我一整年
  3. 数据挖掘算法——常用分类算法总结
  4. android证书在线生成方法
  5. 2019年6月4日 VIVO提前批笔试 题目3
  6. html5 高度 满屏,HTML5 全屏特性
  7. 【Android】Studio 依赖 ButterKnife 黄油刀 时出现 空指针异常
  8. java 兑换码生成_java生成兑换码礼包码--工具类
  9. k8s+docker实战(长篇)
  10. python+matplotlib绘图线条类型、颜色、散点类型