长篇文章请不要气馁.我尽量提供尽可能多的数据,我真的需要帮助解决这个问题: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
命令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时权限被拒绝错误
简短的介绍:
我想在启动后通过 systemd 服务脚本自动启动一个可执行文件(opencv 二进制文件,通过 C++ 生成),但我没有成功。
我将错误范围缩小到代码语句“cv::imshow(....)”,它打开一个窗口并显示一个图像。此时代码抛出错误:“QXcbConnection:Could not connect to display”
但是,如果我手动执行 sh-script 或二进制文件,两者都可以正常工作。我在 stackoverflow 上搜索了最常见的错误,并尝试修复我能找到的所有错误。我很确定:
我将不胜感激任何帮助。请帮助我修复错误,并请向我解释为什么会首先发生此错误。非常感谢 :)
.
我的系统:
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) autostart ×1
bash ×1
linux ×1
opencv ×1
performance ×1
python ×1
raspberry-pi ×1
slowdown ×1
ssh ×1
systemd ×1