python并行运行函数

# -*- coding: utf-8 -*-

import multiprocessing
import os, time,random
import pymysql

curdir = os.path.dirname(__file__)

def db_conn():
    conn = pymysql.connect(host=‘localhost‘,user=‘root‘,password=‘123456‘,db=‘entries‘, charset=‘utf8‘)
    #conn = pymysql.connect(host=‘localhost‘,user=‘root‘,password=‘root‘,db=‘db‘, charset=‘utf8‘, cursorclass=pymysql.cursors.DictCursor)
    return conn

def db_query(conn, sql):
    cursor = conn.cursor()
    cursor.execute(sql)
    result = cursor.fetchall()
    return result

def fun_1():
    fp = open(os.path.join(curdir, ‘engines.txt‘), ‘w‘)
    conn = db_conn()
    sql = ‘select engine,support,comment from engines;‘
    result = db_query(conn, sql)
    for res in result:
        fp.write("%s|%s|%s\n" %(res[0],res[1], res[2]))
        fp.flush()
    fp.close()
    conn.close()

def fun_2():
    fp = open(os.path.join(curdir, ‘collations.txt‘), ‘w‘)
    conn = db_conn()
    sql = ‘select collation_name,character_set_name,id,is_default, is_compiled from collations;‘
    result = db_query(conn, sql)
    for res in result:
        fp.write("%s|%s|%s|%s|%s\n" %(res[0],res[1], str(res[2]),res[3],res[4]))
        fp.flush()
    fp.close()
    conn.close()

def fun_3():
    fp = open(os.path.join(curdir, ‘indexes.txt‘), ‘w‘)
    conn = db_conn()
    sql = ‘select name,table_id,type,n_fields,page_no from indexes;‘
    result = db_query(conn, sql)
    for res in result:
        fp.write("%s|%s|%s|%s|%s\n" %(res[0],res[1], res[2],res[3],res[4]))
        fp.flush()
    fp.close()
    conn.close()

def main():
    conn = db_conn()
    fun_list = [ fun_1, fun_2, fun_3 ]
    print("parent process %s" %  os.getpid())

    pool = multiprocessing.Pool(3)
    start = time.time()
    for func in fun_list:
        print("func name", func)
        pool.apply_async(func)

    print(‘waiting for all subprocess done...‘)
    pool.close()
    pool.join()
    end = time.time()

    print(‘All subprocess done, run %0.2f seconds‘ % (end - start))
    conn.close()

if __name__ == ‘__main__‘:
    main()  # 0.3  - 0.42

    ‘‘‘
    start = time.time()
    conn = db_conn()
    fun_1(conn)
    fun_2(conn)
    fun_3(conn)
    conn.close()
    end = time.time()
    print(‘All done, run %0.2f seconds‘ % (end - start))  #6.61 6.94 7.03 7.30 6.91
    ‘‘‘

当fun_1, fun_2, fun_3本身不是很耗时的时候,并行的效率没有顺序执行的效率高。

时间: 2024-10-12 17:51:57

python并行运行函数的相关文章

Python 并行分布式框架 Celery

Celery 简介 除了redis,还可以使用另外一个神器---Celery.Celery是一个异步任务的调度工具. Celery 是 Distributed Task Queue,分布式任务队列,分布式决定了可以有多个 worker 的存在,队列表示其是异步操作,即存在一个产生任务提出需求的工头,和一群等着被分配工作的码农. 在 Python 中定义 Celery 的时候,我们要引入 Broker,中文翻译过来就是"中间人"的意思,在这里 Broker 起到一个中间人的角色.在工头提

【转】Python 并行分布式框架 Celery

原文链接:https://blog.csdn.net/freeking101/article/details/74707619 Celery 官网:http://www.celeryproject.org/ Celery 官方文档英文版:http://docs.celeryproject.org/en/latest/index.html Celery 官方文档中文版:http://docs.jinkan.org/docs/celery/ celery配置:http://docs.jinkan.o

Python并行编程(十):多线程性能评估

1.基本概念 GIL是CPython解释器引入的锁,GIL在解释器层面阻止了真正的并行运行.解释器在执行任何线程之前,必须等待当前正在运行的线程释放GIL,事实上,解释器会强迫想要运行的线程必须拿到GIL才能访问解释器的任何资源,例如栈或Python对象等,这也正是GIL的目的,为了阻止不同的线程并发访问Python对象.这样GIL可以保护解释器的内存,让垃圾回收工作正常.但事实上,这却造成了程序员无法通过并行执行多线程来提高程序的性能.如果我们去掉GIL,就可以实现真正的并行.GIL并没有影响

[python 并行2]线程

线程篇 基本使用 python线程使用的两个模块为: _thread (不推荐再使用). threading (查看threading的源码可以发现,threading实际是对_thread进一步的封装,官方将其称为 Low-level threading API,下面简单尝试使用_thread) ~~调用start_new_thread()函数生成新线程 函数声明:_thread.start_new_thread(function, args[, kwargs]) function: 子线程所

[python 并行3]进程

进程篇 基本使用 1 #coding=utf-8 import multiprocessing import os # 获取pid用 import time # 延时用 # 子进程要执行的函数 def child_proc(name): print(f'child process {name} pid: {os.getpid()}') time.sleep(3) print(f'{name} finish') # 主进程,必须在主模块中执行 if __name__ == '__main__':

如何理解Python的Main函数?

作者:蟒蛇帝国(ID:Pythondg) 难度:初级 演示环境:OS:ubuntu 16.04Python:3.6 编写 Python 代码的时候我们经常看到下面这条语句.貌似是 Python 的 Main 函数.那它具体是什么意思呢. if __name__ == '__main__':     print('hello world') 首先 Python 里有两个概念, 源码文件: ~/code_house/py_dev$ tree . ├── file1.py ├── file2.py └

Python高阶函数-闭包

高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回. 在这里我们首先回忆一下python代码运行的时候遇到函数是怎么做的. 从python解释器开始执行之后,就在内存中开辟了一个空间 每当遇到一个变量的时候,就把变量名和值之间的对应关系记录下来. 但是当遇到函数定义的时候解释器只是象征性的将函数名读入内存,表示知道这个函数的存在了,至于函数内部的变量和逻辑解释器根本不关心. 等执行到函数调用的时候,python解释器会再开辟一块内存来存储这个函数里的内容,这个时候,才关注函数里面有哪

python基础教程函数参数

python里有很多的内置函数给我们的工作带来了很多发便利,在我们实现某些功能或者优化代码的时候,可以自己定义一个函数,同时我们在定义一个类的时候也会用到函数的一些知识去构造一个方法,这里就涉及到一些关于函数的基础知识和函数传参的知识. 一.函数的相关介绍 1.函数定义:函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可. 函数特性: 减少重复代码 使程序变的可扩展 使程序变得易维护 2.函数的定义示例 定义一个函数要使用def语句,依次写出函数名.括

python基础——sorted()函数

python基础——sorted()函数 排序算法 排序也是在程序中经常用到的算法.无论使用冒泡排序还是快速排序,排序的核心是比较两个元素的大小.如果是数字,我们可以直接比较,但如果是字符串或者两个dict呢?直接比较数学上的大小是没有意义的,因此,比较的过程必须通过函数抽象出来. Python内置的sorted()函数就可以对list进行排序: >>> sorted([36, 5, -12, 9, -21]) [-21, -12, 5, 9, 36] 此外,sorted()函数也是一个