Skip to main content

并行化 Python 代码

项目描述


并行化 Python 代码

持续集成徽章 执照

parhugin提供以下功能:

目录

安装

  1. 使用 pip 安装

    pip install git+https://github.com/kasra-hosseini/parhugin.git
    
  2. 从源代码安装 parhugin

    • 克隆parhugin源代码:
    git clone https://github.com/kasra-hosseini/parhugin.git 
    
    • 安装parhugin:
    cd /path/to/my/parhugin
    python setup.py install
    

    或者:

    cd /path/to/my/parhugin
    pip install -v -e .
    

使用多处理并行运行一个或多个 Python 函数

在这种情况下,我们有:

  • 一个或多个函数
  • 要并行运行的作业列表,例如:
[   
    [func1, (arg1_1, arg2_1, arg3_1)],
    [func1, (arg1_2, arg2_2, arg3_2)],  
    [func2, (...)],
    ...
] 

⚠️ 如果一个函数只有一个参数,不要忘记将它添加到上面的列表中[func_one_arg, [arg1]][func_one_arg, (arg1,)]

  • 用户指定要并行运行的进程数。
  • parhugin通过在请求的进程数上按照 FIFO 分配作业来并行化。

示例 1

首先,我们导入parhugin并定义了两个简单的函数,叫做func1and func2。这些函数可以有不同数量的参数。

from parhugin import multiFunc
import time

# Define two simple functions, func1 and func2 
# Note that functions can have different number of arguments
def func1(a, b, sleep=0.5, info="func1"): 
    print(f"start, {info} calculated {a+b}")
    time.sleep(sleep)
    print(f"end, {info}")

def func2(a, sleep=0.2, info="func2"): 
    print(f"start, {info} prints {a}")
    time.sleep(sleep)
    print(f"end, {info}")

接下来,我们指定要并行运行的进程数。如果作业是 CPU 密集型的,则这可以是处理器的数量。否则,您可以将其设置为任何其他值。

myproc = multiFunc(num_req_p=10)

现在,我们需要添加要并行运行的作业。有不同的方法可以做到这一点:

  1. 添加一个函数及其参数:
myproc.add_job(target_func=func1, target_args=(2, 3, 0.5, "func1"))
print(myproc)

同样,我们可以添加另一个函数:

myproc.add_job(target_func=func2, target_args=(10, 0.2, "func2"))
print(myproc)
  1. 创建工作列表:
list_jobs = []
for i in range(1, 20):
    list_jobs.append([func2, (f"{i}", 0.2, "func2")])

# and then adding them to myproc
myproc.add_list_jobs(list_jobs)
print(myproc)

最后,在请求的进程数上运行作业:

myproc.run_jobs()

也可以通过以下方式更改输出的详细级别:

myproc.run_jobs(verbosity=2)

完整示例

示例 1

from parhugin import multiFunc
import time

# Define two simple functions, func1 and func2 
# Note that functions can have different number of arguments
def func1(a, b, sleep=0.5, info="func1"): 
    print(f"start, {info} calculated {a+b}")
    time.sleep(sleep)
    print(f"end, {info}")

def func2(a, sleep=0.2, info="func2"): 
    print(f"start, {info} prints {a}")
    time.sleep(sleep)
    print(f"end, {info}")

myproc  =  multiFunc ( num_req_p = 10 ) 
myproc add_job ( target_func = func1 ,  target_args = ( 2 ,  3 ,  0.5 ,  "func1" ))
打印( myproc )

myproc.add_job(target_func=func2, target_args=(10, 0.2, "func2"))
print(myproc)

list_jobs = []
for i in range(1, 20):
    list_jobs.append([func2, (f"{i}", 0.2, "func2")])

# and then adding them to myproc
myproc.add_list_jobs(list_jobs)
print(myproc)

myproc.run_jobs(verbosity=2)

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

parhugin-0.0.3.tar.gz (6.3 kB 查看哈希)

已上传 source