python 封装函数_python多进程使用函数封装实例

我就废话不多说了,直接看代码吧!

import multiprocessing as mp

from multiprocessing import Process

class MyProcess(Process):

"""

自定义多进程,继承自原生Process,目的是获取多进程结果到queue

"""

def __init__(self, func, args, q):

super(MyProcess, self).__init__()

self.func = func

self.args = args

self.res = ''

self.q = q

#self._daemonic = True

#self._daemonic = True

def run(self):

self.res = self.func(*self.args)

self.q.put((self.func.__name__, self.res))

def use_multiprocessing(func_list):

#os.system('export PYTHONOPTIMIZE=1') # 解决 daemonic processes are not allowed to have children 问题

q = mp.Queue() # 队列,将多进程结果存入这里,进程间共享, 多进程必须使用 multiprocessing 的queue

proc_list = []

res = []

for func in func_list:

proc = MyProcess(func['func'], args=func['args'], q=q)

proc.start()

proc_list.append(proc)

for p in proc_list:

p.join()

while not q.empty():

r = q.get()

res.append(r)

return res

使用时候,将需要多进程执行的函数和函数的参数当作字段,组成个list 传给use_multiprocessing 方法即可

补充知识:python一个文件里面多个函数同时执行(多进程的方法,并发)

看代码吧!

#coding=utf-8

import time

from selenium import webdriver

import threading

def fun1(a):

print a

def fun2():

print 222

threads = []

threads.append(threading.Thread(target=fun1,args=(u'爱情买卖',)))

threads.append(threading.Thread(target=fun2))

print(threads)

if __name__ == '__main__':

for t in threads:

t.setDaemon(True) #我拿来做selenium自动化模拟多个用户使用浏览器的时候,加了这个就启动不了,要去掉

t.start()

import threading

首先导入threading 模块,这是使用多线程的前提。

threads = []

t1 = threading.Thread(target=fun1,args=(u'爱情买卖',))

threads.append(t1)

创建了threads数组,创建线程t1,使用threading.Thread()方法,在这个方法中调用music方法target=music,args方法对music进行传参。 把创建好的线程t1装到threads数组中。

接着以同样的方式创建线程t2,并把t2也装到threads数组。

for t in threads:

t.setDaemon(True)

t.start()

最后通过for循环遍历数组。(数组被装载了t1和t2两个线程)

setDaemon()

setDaemon(True)将线程声明为守护线程,必须在start() 方法调用之前设置,如果不设置为守护线程程序会被无限挂起。子线程启动后,父线程也继续执行下去,当父线程执行完最后一条语句print "all over %s" %ctime()后,没有等待子线程,直接就退出了,同时子线程也一同结束。

start()

开始线程活动。

后记:

搞了个并发浏览器操作,

如果要做参数化,用ddt会导致所有行为都在一个浏览器操作,去掉ddt框架后,并发正常

以上这篇python多进程使用函数封装实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

时间: 2020-05-02

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python中,multiprocessing模块提供了一种用于创建和管理多个进程的方法,以实现并行计算的目的。其中,multi函数是multiprocessing模块的一个重要函数之一,用于创建多个进程并并发地执行任务。 multi函数使用方法如下: 首先,在代码中导入multiprocessing模块:import multiprocessing 接下来,定义一个函数来作为子进程的任务,该函数会在多个进程中并发执行。例如,我们可以定义一个计算平方的函数: def square(x): return x * x 然后,使用multi函数来创建多个进程并执行任务: if __name__ == '__main__': # 创建一个进程池,指定最大进程数为4 pool = multiprocessing.Pool(processes=4) # 使用进程池的map函数并发地执行square函数,传入参数为[1, 2, 3, 4, 5] result = pool.map(square, [1, 2, 3, 4, 5]) # 输出结果 print(result) 在上述代码中,首先创建了一个进程池,通过multiprocessing.Pool(processes=4)指定了最大进程数为4。然后,使用进程池的map函数并发地执行任务函数square,并传入参数为[1, 2, 3, 4, 5]。最后,通过print函数输出执行结果。 运行以上代码,将会得到[1, 4, 9, 16, 25]这样一个输出结果,即计算每个数字的平方。 总结来说,Python中multi函数通过创建多个进程来实现并发执行任务。使用multi函数需要导入multiprocessing模块,并配合进程池的map函数来并发地执行任务函数。以上是multi函数使用方法,在实际应用中可以根据需要进行进一步的优化和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值