小编use*_*147的帖子

Python多处理 - 跟踪pool.map操作的过程

我有一个函数执行一些模拟并返回一个字符串格式的数组.

我想运行模拟(函数)来改变输入参数值,超过10000个可能的输入值,并将结果写入单个文件.

我正在使用多处理,特别是pool.map函数来并行运行模拟.

由于运行模拟功能超过10000次的整个过程需要很长时间,我真的想跟踪整个操作的过程.

我认为下面我当前代码中的问题是,pool.map运行该函数10000次,在这些操作期间没有任何进程跟踪.一旦并行处理完成10000次模拟(可能是几小时到几天),那么我会在10000个模拟结果被保存到文件时继续跟踪.所以这并不是真正跟踪pool.map操作的处理.

是否可以轻松修复我的代码,以便进行流程跟踪?

def simFunction(input):
    # Does some simulation and outputs simResult
    return str(simResult)

# Parallel processing

inputs = np.arange(0,10000,1)

if __name__ == "__main__":
    numCores = multiprocessing.cpu_count()
    pool = multiprocessing.Pool(processes = numCores)
    t = pool.map(simFunction, inputs) 
    with open('results.txt','w') as out:
        print("Starting to simulate " + str(len(inputs)) + " input values...")
        counter = 0
        for i in t:
            out.write(i + '\n')
            counter = counter + 1
            if counter%100==0:
                print(str(counter) + " of " + str(len(inputs)) + " input …
Run Code Online (Sandbox Code Playgroud)

python pool multiprocessing

10
推荐指数
2
解决办法
1万
查看次数

计算两个numpy数组之间相交值的有效方法

我的程序中存在瓶颈,原因如下:

A = numpy.array([10,4,6,7,1,5,3,4,24,1,1,9,10,10,18])
B = numpy.array([1,4,5,6,7,8,9])

C = numpy.array([i for i in A if i in B])
Run Code Online (Sandbox Code Playgroud)

预期结果C如下:

C = [4 6 7 1 5 4 1 1 9]
Run Code Online (Sandbox Code Playgroud)

有没有更有效的方法来执行此操作?

请注意,数组A包含重复值,需要将它们考虑在内.我无法使用集合交集,因为取交点会省略重复值,只返回[1,4,5,6,7,9].

另请注意,这只是一个简单的演示.实际的阵列大小可以是数千,而不是数百万.

python arrays numpy

9
推荐指数
3
解决办法
1万
查看次数

两个列表的Python交集保持重复

我有两个平面列表,其中一个包含重复值.例如,

array1 = [1,4,4,7,10,10,10,15,16,17,18,20]
array2 = [4,6,7,8,9,10]
Run Code Online (Sandbox Code Playgroud)

我需要在array1中找到也在array2中的值,在array1中保留重复数据.期望的结果将是

result = [4,4,7,10,10,10]
Run Code Online (Sandbox Code Playgroud)

我想避免循环,因为实际数组将包含数百万的值.我尝试了各种设置和交叉组合,但是无法保留重复项.

任何帮助将不胜感激!

python duplicates array-intersect

7
推荐指数
2
解决办法
5007
查看次数

python 3.6+记录器记录pandas数据帧 - 如何缩进整个数据帧?

我需要使用 python 日志模块来记录熊猫数据帧。我需要同等缩进的整个数据框(所有行)。

以下是简单的所需输出:

Test Dataframe Output Below:

       col1  col2
    0     1     3
    1     2     4
Run Code Online (Sandbox Code Playgroud)

但是,我得到以下输出,其中缩进仅应用于数据帧的第一行:

Test Dataframe Output Below:

       col1  col2
0     1     3
1     2     4
Run Code Online (Sandbox Code Playgroud)

我正在运行的示例代码是:

import pandas as pd
import logging

# sample dataframe
test_df = pd.DataFrame({'col1': [1, 2], 'col2': [3, 4]})

# logging set up
logging.basicConfig(level=logging.INFO)
logging.getLogger().handlers.clear()
c_handler = logging.StreamHandler()
c_handler.setFormatter(logging.Formatter('%(message)s'))
logging.getLogger().addHandler(c_handler)

# log the pandas dataframe to console
logging.info(f'\tTest Dataframe Output Below:')
logging.info(f'\n\t\t{test_df}')
logging.info(f'{test_df}')
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激!

python logging python-3.x pandas f-string

7
推荐指数
1
解决办法
5802
查看次数

在 Windows 10 上通过 Anaconda 4.7.12 安装 openssl-1.1.1g 时出现 InvalidArchiveError

我正在尝试安装请求模块,并且 openssl 不断导致 InvalidArchiveError。我在 Windows 10 操作系统上使用 conda 4.7.12、python 3.8.2。在安装需要 openssl-1.1.1g 的其他软件包时,我遇到了同样的问题。我已按照错误消息中的建议删除并重新下载“openssl-1.1.1g-he774522_0.tar.bz2”,但我一直收到相同的错误。这个版本的openssl坏了还是什么?任何帮助将不胜感激。

lykim@Louis MINGW64 ~/Desktop/master/Learning
$ conda install -c anaconda requests
Collecting package metadata (current_repodata.json): ...working... done
Solving environment: ...working... done


==> WARNING: A newer version of conda exists. <==
  current version: 4.7.12
  latest version: 4.8.3

Please update conda by running

    $ conda update -n base conda



## Package Plan ##

  environment location: C:\ProgramData\Anaconda3\envs\pytorch

  added / updated specs:
    - requests


The following packages will be downloaded:

    package                    |            build
    ---------------------------|----------------- …
Run Code Online (Sandbox Code Playgroud)

python openssl python-requests anaconda

2
推荐指数
1
解决办法
5576
查看次数

Python将函数输出写入文件

我有一个模拟某事的函数,并将结果数组写入文本文件.

例如,

def SimulationFunction(args):
    #some simulation which results simOUT
    f = open('results.txt','w')
    f.write(str(simOUT) + '\n')
    f.close()
Run Code Online (Sandbox Code Playgroud)

我想在不同的输入参数上运行该函数,并将输出保存到相同results.txt文件的新行.

例如,

for i in inputArgs:
    SimulationFunction(i)
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试运行它时,生成的文本文件仅包含上次模拟运行的结果.

我在这里错过了什么?任何建议将不胜感激!

python

0
推荐指数
1
解决办法
1万
查看次数