小编Lod*_*rik的帖子

Python中的多处理:Numpy + Vector Summation - >巨大的减速

长篇文章请不要气馁.我尽量提供尽可能多的数据,我真的需要帮助解决这个问题:S.如果有新的提示或想法,我会每天更新

问题:

我尝试在并行进程的帮助下并行运行两个核心机器上的Python代码(以避免GIL),但是存在代码明显变慢的问题.例如,在一个核心机器上运行每个工作负载需要600秒,但在两个核心机器上运行需要1600秒(每个工作负载800秒).

我已经尝试过的:

  • 我测量了内存,似乎没有内存问题.[只在高点使用20%].

  • 我使用"htop"检查我是否真的在不同的核心上运行程序,或者我的核心亲和力是否搞砸了.但也没有运气,我的程序在我的所有内核上运行.

  • 问题是CPU限制的问题,因此我检查并确认我的代码在所有内核上以100%CPU运行,大多数情况下.

  • 我检查了进程ID,我确实产生了两个不同的进程.

  • 我将我提交给执行程序[e.submit(function,[...])]的函数更改为计算派函数并观察到了巨大的加速.所以问题很可能发生在我的process_function(...)中,我将其提交到执行程序而不是之前的代码中.

  • 目前我正在使用"并发"中的"期货"来平行任务.但我也试过"多处理"中的"池"类.但是,结果保持不变.

码:

  • 产卵过程:

    result = [None]*psutil.cpu_count()
    
    e = futures.ProcessPoolExecutor( max_workers=psutil.cpu_count() )
    
    for i in range(psutil.cpu_count()):
        result[i] = e.submit(process_function, ...)
    
    Run Code Online (Sandbox Code Playgroud)
  • process_function:

    from math import floor
    from math import ceil
    import numpy
    import MySQLdb
    import time
    
    db = MySQLdb.connect(...)
    cursor  = db.cursor()
    query = "SELECT ...."
    cursor.execute(query)
    
    [...]  #save db results into the variable db_matrix (30 columns, 5.000 rows)
    [...]  #save db results into the variable bp_vector (3 columns, 500 rows)
    [...]  #save …
    Run Code Online (Sandbox Code Playgroud)

python parallel-processing performance multiprocessing slowdown

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

命令"gcloud compute ssh"和"ssh"之间的区别

命令gcloud compute ssh和"只是" ssh命令之间究竟有什么区别?

我做了观察,即使这样我也可以轻松地在两个实例之间连接gcloud compute ssh,我不能用ssh命令来做.但是,手动设置ssh-keys后,ssh命令工作正常.但是gcloud命令不应该处理密钥管理吗?如果使用gcloud进行一次设置,为什么ssh命令无法正常工作

.

工作良好:

gcloud compute ssh instance_2
gcloud compute shh instance_1
Run Code Online (Sandbox Code Playgroud)

.

如果不手动设置ssh-key,则无效:

ssh instance_2
shh instance_1
Run Code Online (Sandbox Code Playgroud)

.

这个问题来自我遇到的另一个问题,这让我了几天:OpenMPI:尝试使用mpirun时权限被拒绝错误

linux ssh google-compute-engine google-cloud-platform

6
推荐指数
2
解决办法
972
查看次数

Raspberry Pi - 自动启动 OpenCv 脚本 - cv::imshow() 错误

简短的介绍:

我想在启动后通过 systemd 服务脚本自动启动一个可执行文件(opencv 二进制文件,通过 C++ 生成),但我没有成功。

我将错误范围缩小到代码语句“cv::imshow(....)”,它打开一个窗口并显示一个图像。此时代码抛出错误:“QXcbConnection:Could not connect to display”

但是,如果我手动执行 sh-script 或二进制文件,两者都可以正常工作。我在 stackoverflow 上搜索了最常见的错误,并尝试修复我能找到的所有错误。我很确定:

  1. 我的服务文件实际上在启动时运行(直到发生错误)
  2. 手动执行二进制文件工作正常
  3. 手动执行 .sh-script 工作正常
  4. 我没有运行时链接错误(请参阅 .sh-script)

我将不胜感激任何帮助。请帮助我修复错误,并请向我解释为什么会首先发生此错误。非常感谢 :)

.

我的系统:

Machine: Raspberry Pi 3 Model B
Architecture: arm32 / ARMv7
OS: NOOBS
Run Code Online (Sandbox Code Playgroud)

.

我在 /etc/systemd/system/ (test.service) 中的脚本:

[Unit]
Description=lalala

[Service]
Type=oneshot
ExecStart=/bin/bash "/home/pi/Desktop/test.sh" start
ExecStop=/bin/bash "/home/pi/Desktop/test.sh" stop
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)

此外,我确实执行了以下命令:

sudo chmod u+rwx /etc/systemd/system/test.service

sudo systemctl enable test
Run Code Online (Sandbox Code Playgroud)

如果我手动启动该服务,它会以与引导过程中自动启动时相同的错误输出运行:

sudo systemctl enable test
Run Code Online (Sandbox Code Playgroud)

.

我的 shell 脚本(test.sh):

#!/bin/sh -e

exec 2> …
Run Code Online (Sandbox Code Playgroud)

bash opencv autostart raspberry-pi systemd

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