基本上,我有 2 个线程,接收和发送。我希望能够输入一条消息,每当我收到一条新消息时,它就会“打印在我正在输入的行上方”。首先我认为会起作用,您可以粘贴它,它将运行:
import multiprocessing
import time
from reprint import output
import time
import random
import sys
def receiveThread(queue):
i = 0
while True:
queue.put(i)
i+=1
time.sleep(0.5)
def sendThread(queue):
while True:
a = sys.stdin.read(1)
if (a != ""):
queue.put(a)
if __name__ == "__main__":
send_queue = multiprocessing.Queue()
receive_queue = multiprocessing.Queue()
send_thread = multiprocessing.Process(target=sendThread, args=[send_queue],)
receive_thread = multiprocessing.Process(target=receiveThread, args=[receive_queue],)
receive_thread.start()
send_thread.start()
with output(initial_len=2, interval=0) as output_lines:
while True:
output_lines[0] = "Received: {}".format(str(receive_queue.get()))
output_lines[1] = "Last Sent: {}".format(str(send_queue.get()))
Run Code Online (Sandbox Code Playgroud)
但是这里发生的是我无法发送数据。与我 put 时不同,输入不会给我一个 EOF a …
我寻找了其他问题,这个未接受的答案问题是我能找到的唯一一个以某种方式涵盖了这个问题并且没有真正帮助的问题。另外,我需要它来处理进程,而不是线程。
因此,我从头开始编写了一个示例程序来展示我的问题,您应该能够粘贴它并且它将运行:
import multiprocessing
import time
class Apple:
def __init__(self, color):
self.color = color
def thinkAboutApple(apple):
while True:
print(apple.color)
time.sleep(2)
my_apple = Apple("red")
new_process = multiprocessing.Process(target=thinkAboutApple, args=(my_apple,))
new_process.start()
time.sleep(4)
print("new: brown")
my_apple.color = "brown"
#so that the program doesn't exit after time.sleep(4)
while True:
pass
Run Code Online (Sandbox Code Playgroud)
# actual output | # wanted output
red | red
red | red
new: brown | new: brown
red | brown
red | brown
Run Code Online (Sandbox Code Playgroud)
这告诉我,要么苹果处于一个奇怪的假设,它同时有两种颜色,要么 new_process' 苹果位于 ram 中的另一个位置,并与主进程中的苹果分开。
所以问题是:有没有办法让进程中的苹果指针指向同一个苹果,或者什么是Pythonic方法来保持所有进程中苹果的所有实例相同?如果我在许多进程中有相同的苹果,甚至更多进程没有苹果,我如何确保它们始终相同?
首先,虽然与问题类似,但不是我所需要的,因为答案对我的情况没有帮助。
我让我的 AppConfig 根据设备决定字体大小,以便非常大的设备(例如平板电脑)获得更大的文本(一点点)。我的配置在任何视图之前被调用,所以在运行时我没有 BuildContext。那么我该怎么做呢?
class AppConfig {
static AppConfig _instance;
static AppConfig instance() {
if (_instance == null) {
_instance = AppConfig();
}
return _instance;
}
// config stuff for colours and themes
double width = MediaQuery.of(context).size.width;
if (width > 500) { //arbitrary number I haven't decided yet
initWithBigFonts();
} else {
initWithSmallFonts();
}
Run Code Online (Sandbox Code Playgroud) 这让我很困惑。所有代码示例都是namespaceA和namespaceB,方法名称是foo()和bar()也没有帮助。每个人都解释它的方式使它看起来好像命名空间是前 OOP 时代的遗物,在那里你不能说“类汽车提供燃料水平”,但必须从另一种方法来解决这个问题。但是当我现在想做一个 C++ 级别时,使用命名空间有什么意义呢?并不是说标题已经足够令人困惑,命名空间对我来说绝对没有意义,无论是它们的工作方式还是为什么使用它们。
Traffic例如,假设我有一个围绕 构建的项目。您将拥有Cars 及其组件、Drivers 和Passengers 以及Road. 现在,Road有Cars,每个Car都有Persons。这会是什么样子?
你有命名空间Road, Car,Person吗?会main()使用命名空间Road来访问标题中的内容吗?命名空间是否Road包含命名空间Car,并且Car包含命名空间Person,并且可以通过它main()访问 中的方法Person?这是大多数指南解释这一点的方式,但我并没有真正看到这比仅导入头文件的优势,这不会有相同的效果吗?
或者你会在同一个命名空间中放置多个头文件,比如namespace Traffic所有这些类?你能嵌套命名空间吗?
我知道 C# 并且一直不知道它有命名空间,直到我刚刚查找它,并且从不需要它,在 Java、Python 和 Dart 中,这些也从未出现过。因为我正在尝试自学 C++,所以我现在有点被困在这里,在这里问这个问题。到目前为止,我也从未在 C++ 中使用过它们,但我想正确地学习它。
正如您在这里看到的,创建新目录的选项不存在,我只能添加新包。
我想做的是创建一个像这样的文件夹结构
>Lib
>>Pages
>>>Startpage
>>>Loginpage
>>Helpers
>>>Networkhelper
>>>>Requesthelper
>>>Storagehelper
etc...
Run Code Online (Sandbox Code Playgroud)
我无法对包裹执行此操作,因为我无法将包裹放入空包裹和其他东西中
这以前有效,但是现在当我创建一个新项目时,就像我一直做的那样,它不起作用。关于我能做什么/出了什么问题有什么想法吗?
所以我不习惯硬件关闭编程,指针和内存总是为我完成,但因为我想学习 C++,我想尝试一个二维数组,由于未知大小而不起作用,所以我决定去带有 2d 列表。
我现在遇到的问题是我不知道程序将如何运行,在我可以测试它之前,我想知道值是否会被复制、覆盖等。
#include "board.h"
#include "list"
using namespace std;
void Board::initiate_board()
{
list<list<int>> list_of_rows;
for (int rows = 0; rows++; rows < Board::rows) {
list<int> new_row;
for (int columns = 0; columns++; columns < Board::columns) {
new_row.push_back(0);
}
list_of_rows.push_back(new_row);
}
}
Run Code Online (Sandbox Code Playgroud)
这应该做的是创建一个填充 0 的 2d 列表。我不知道存储中会发生什么,而且我无法可视化 RAM 并知道是什么(如果可以的话,我会不知所措)所以我希望有人能帮我解决这个问题。
我认为这段代码的作用是创建一个 0 列表,将其放入另一个列表中,然后启动一个新列表,自动删除旧列表,因为它不会被引用或会被覆盖(不知道是哪个)。所以当行和列在 4 时,它看起来像
|0|0|0|0| => ... => |0|0|0|0|
|0|0|0|0|
|0|0|0|0|
|0|0|0|0|
Run Code Online (Sandbox Code Playgroud)
我不确定的两件事是 A:会创建一个新列表吗?或者旧的会像这样增加:
|0|0|0|0|
|0|0|0|0|0|0|0|0|
|0|0|0|0|0|0|0|0|0|0|0|0|
|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|
Run Code Online (Sandbox Code Playgroud)
第二个问题是:列表会被复制还是引用会被存储?那么在将 4-long-list 保存到第一个列表后会增加原始列表,并且因为只保存了一个引用,所以将列表 [0] 也增加到 8 长,这样如果我改变了列表中的第二个值每一行都会改变吗?
|0|0|0|0| …Run Code Online (Sandbox Code Playgroud)