首页 > 编程语言 >Python加载C语言动态库

Python加载C语言动态库

时间:2024-04-02 17:38:15浏览次数:26  
标签:lib Python C语言 动态 out hello 加载

★ 背景说明

1. python是一门胶水语言,可以通过加载动态库的方式在一个项目中运行不同语言的程序
2. 通过动态库加载其他语言的方式可以解决多线程GIL使用C解释器无法并发运行的问题

★ 在Linux 中运行C代码:

  • 编辑C语言代码
    // hello.c
    // c代码作为启动文件必须加include<stdio.h>,作为动态库可以不加
    # include<stdio.h>
    
    void dead_loop(){
        while(1)
        {
            printf("hello world\n");
        }
    }
    
    // c语言必须以main函数作为启动入口
    void main(){
        printf("this is main function!\n");
    }
    
  • 编译C语言代码(会生成xx.out 二进制可执行文件; 不需要编译器)
    gcc  xxx.c -o yyy.out  
    
    // -o 指定生成二进制文件的名称
    gcc hello.c -o hello.out
    
  • 运行编译后的文件
    ./hello.out
    

★ 使用Python加载C语言动态库

  • 把C语言文件编译成一个动态库(Linux平台下)
    gcc xx.c -fPIC -shared -o  lib_hello.so
    
  • python调用C语言动态库代码实现
    # dynamic_load_c.py
    
    import ctypes
    from threading import Thread
    
    # 加载动态库
    hello_lib = ctypes.cdll.LoadLibrary("./lib_hello.so")
    # 多线程调用C语言库
    Thread(target=hello_lib.dead_loop).start()
    # 也可以直接 hello_lib.dead_loop()  方式调用
    

标签:lib,Python,C语言,动态,out,hello,加载
From: https://www.cnblogs.com/cs-songbai/p/18111107

相关文章

  • Leetcode--第1题(暴力解法C语言版)
    题目:给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。/***Note:Thereturnedarraymustbemalloced,assum......
  • python selenium 速查笔记
    1.安装与配置pipinstallselenium基本使用selenium都是为了动态加载网页内容用于爬虫,所以一般也会用到phantomjsmac下如果要配置phantomjs环境的话echo$PATHln-s<phantomjs地址><PATH中任一路径>至于chromeDriver,配置方法类似,下载地址:https://sites.google.com/a/chro......
  • python基础——基础代码每日复习
    '''字符串的格式化方法一,示例'''name="张三"money=102desc="今天收到{}的学费{}元"string=desc.format(name,money)print(string)#今天收到张三的学费102元'''字符串的格式化方法一,示例'''str='今天在{}......
  • systemctl控制python脚本开机自启
    一次搞定Linuxsystemd服务脚本-知乎(zhihu.com)#service文件目录/etc/systemd/system/mantis-stat.service#文件内容Description=mantis-statAfter=network.target[Service]Type=forkingUser=rootGroup=rootWorkingDirectory=/root/daizc/mantis-stat-master......
  • python数据容器之列表
    python数据容器-列表1、列表列表的定义语法:[元素1,元素2,元素3,…]列表内的每一个数据,称之为元素以[]作为标识列表内每一个元素之间用,逗号隔开注意:列表可以一次存储多个数据,且可以为不同的数据类型,支持嵌套列表的特点:可以容纳多个元素,上限为2**6......
  • 入门级Python编程题(2)
    编写一个Python程序,找出列表中第n小的整数。定义函数find_nth_smallest(),该函数接受整数列表numbers_list和整数n作为参数。在函数内部,返回列表中第n小的整数。如果n大于列表的长度,则返回None。deffind_nth_smallest(numbers_list,n):ifn>len(numbers_list):......
  • python学习-python解释器的安装
    先进入python下载的官网:https://www.python.org/2.根据自己电脑的系统来选择下载哪个解释器的版本,我的是Windows,选择的是Windows,截图如下:3.再根据自己Windows的版本来选择下载对应的版本,以Python3.11.8版本为例,(64-bit),截图如下:4.下载完成之后双击对应的exe文件,进行安装,安......
  • PyTorch学习(5):并行训练模型权重的本地化与加载
    1.并行训练与非并行训练        在训练深度神经网络时,我们一般会采用CPU或GPU来完成。得益于开源传统,许多算法都提供了完整的开源代码工程,便于学习和使用。随着GPU的普及,GPGPU已经占据了大部分的训练场景。        我们在这里仅以GPU训练场景做一些说明。......
  • 类加载过程详解
    1、加载通过类的全名,获取类的二进制数据流。解析类的二进制数据流为方法区内的数据结构(Java类模型) 创建java.lang.Class类的实例,表示该类型。作为方法区这个类的各种数据的访问入口 2、验证 验证类是否符合JVM规范,安全性检查 文件格式验证:是否符合Class文件的规范 元......
  • 用C语言输出100到200以内的所有素数 (只能被本身或则1整除的数)
    代码如下#include<stdio.h>intmain(){//输出100到200以内的所有素数(只能被本身或则1整除的数)   inti=0,j=0;   printf("100到200以内的所有素数为:");   for(i=100;i<=200;i++)   {         for(j=2;j<i;j++)  ......