我正在尝试在Python中进行一些简单的IPC,如下所示:一个Python进程使用启动另一个进程subprocess。子进程将一些数据发送到管道中,而父进程接收该数据。
这是我当前的实现:
# parent.py
import pickle
import os
import subprocess
import sys
read_fd, write_fd = os.pipe()
if hasattr(os, 'set_inheritable'):
os.set_inheritable(write_fd, True)
child = subprocess.Popen((sys.executable, 'child.py', str(write_fd)), close_fds=False)
try:
with os.fdopen(read_fd, 'rb') as reader:
data = pickle.load(reader)
finally:
child.wait()
assert data == 'This is the data.'
Run Code Online (Sandbox Code Playgroud)
# child.py
import pickle
import os
import sys
with os.fdopen(int(sys.argv[1]), 'wb') as writer:
pickle.dump('This is the data.', writer)
Run Code Online (Sandbox Code Playgroud)
在Unix上,这可以按预期工作,但是如果我在Windows上运行此代码,则会收到以下错误,此后程序将挂起直到被中断:
# parent.py
import pickle
import os
import subprocess
import sys
read_fd, write_fd = os.pipe() …Run Code Online (Sandbox Code Playgroud) 我正在使用Rails 1.2.3(是的,我知道)并且对于如何has_many在对象持久性方面的工作感到困惑.
为了举例,我将使用它作为我的声明:
class User < ActiveRecord::Base
has_many :assignments
end
class Assignment < ActiveRecord::Base
belongs_to :user
end
Run Code Online (Sandbox Code Playgroud)
据我了解,这会生成一个方法User#assignments.build,该方法创建一个Assignment对象,该对象user_id是接收实例id(并且其他字段在参数中指定),但不会将此对象保存在数据库中.稍后可以通过调用保存该对象Assignment#save!.
然而,我一直用作教程和参考的实用程序员使用Rails的Agile Web开发第二版说:
如果父对象存在于数据库中,则将子对象添加到集合会自动保存该子对象.
这里似乎有矛盾.我想知道的是:
some_user.assignments.build,Assignment对象是否已保存?some_user.assignments << Assignment.new,Assignment对象是否已保存?some_user.assignments << Assignment.create,是两个数据库调用,还是只有一个?如果我Assignment在创建它并将其添加到之间修改对象怎么样some_user.assignments?save!的Assignment对象User尚未保存在数据库中,会发生什么?PS我不仅仅User#assignments.create用于所有事情的原因是因为它不允许我将初始化转移到外部方法,我希望能够做到这一点.我也不想多次去数据库.
我正在经历htdp并在一开始就找到了这个: -
解释为什么以下句子是非法定义:1.(define(f'x)x)
但是,它在球拍中工作正常:
> (define (f 'x) x)
> (f 'a)
3
> (define a 5)
> (f a)
3
Run Code Online (Sandbox Code Playgroud)
显然,我错过了什么......到底是什么?
BaseX 文档使用“集合”一词的方式使其含义不清楚。集合只是数据库的另一个词,还是一个独特的结构?如果是后者,使用什么命令来操作集合?