【发布时间】:2021-12-31 10:12:15
【问题描述】:
我正在处理子进程。我正在制作一款游戏(几乎处于完成的最后阶段),现在我发现了一个严重的问题。
基本上,在游戏中,我有一个基于 javascript 的服务器,它使用 child_process 来spawn 一个运行 python 脚本的子进程。 python 脚本处理游戏机制,js 代码处理服务器-客户端系统。我需要一个 js 和我的 python 代码之间的通信系统。使用文档和其他资源,我已经成功设置了这样一个系统,但一段时间后,它停止工作。
这里是复制问题的代码:-
Javascript (temp.js):
"use strict";
const childProcess = require('child_process');
let pythonProcess = childProcess.spawn("python", ["temp2.py"], {cwd: "./private/PythonScripts/Temp/"});
pythonProcess.stdin.setDefaultEncoding("utf-8");
pythonProcess.stdout.setEncoding("utf-8");
const writeString = "" +
"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" +
"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" +
"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" +
"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" +
"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" +
"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" +
"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" +
"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\n"; // 8x 128 Zeros
pythonProcess.stdout.on("error", (err) => {
console.log("Stdout Error");
if (err) {
console.log(err);
}
});
let count = 0;
setInterval(() => {
count++;
console.log(count);
pythonProcess.stdin.write(writeString, (err) => {
if (err) {
console.log("Error during writing");
console.log(err);
}
});
}, 100);
Python (3.10.x) (temp2.py):
import logging
logging.basicConfig(format='%(asctime)s - %(levelname)s - %(message)s',
datefmt='%Y-%m-%d %H:%M:%S',
handlers=[logging.FileHandler('temp.log', 'w+', 'utf-8'), logging.StreamHandler()],
level=logging.INFO)
tempLogger = logging.getLogger(__name__)
if __name__ == '__main__':
tempLogger.info("Started")
while True:
inp = input()
tempLogger.info(inp)
目录结构:
temp.js
private
|
|-> PythonScripts
|
|-> Temp
|
|-> temp2.py
|-> temp.log
当我们运行这段代码时,我们会看到 js 成功地继续写入(我假设是因为err 总是undefined),但是 python 只会记录输入只有 79 次。
我的预感是这个问题与缓冲区/管道溢出有关,并且它们没有被耗尽,但是在搜索所有文档以查找 child_process 并为 python 记录/输入之后,我无法弄清楚问题出在哪里,即正在阻止脚本之间的通信。
我该怎么做才能使数据流不会像现在一样卡住。
【问题讨论】:
标签: python node.js io child-process