小编Use*_*ser的帖子

多处理在进程之间共享不可序列化的对象

有三个问题可能重复(但过于具体):

通过回答这个问题,可以回答所有其他三个问题.希望我能说清楚:

一旦我在多处理创建的某个进程中创建了一个对象:

  1. 如何将对该对象的引用传递给其他进程?
  2. (不是那么重要)我如何确保在持有参考时这个过程不会消失?

例1(已解决)

from concurrent.futures import *

def f(v):
    return lambda: v * v

if __name__ == '__main__':
    with ThreadPoolExecutor(1) as e: # works with ThreadPoolExecutor
        l = list(e.map(f, [1,2,3,4]))
    print([g() for g in l]) # [1, 4, 9, 16]
Run Code Online (Sandbox Code Playgroud)

例2

假设f返回一个具有可变状态的对象.应该可以从其他进程访问此相同的对象.

例3

我有一个具有打开文件和锁的对象 - 如何授予对其他进程的访问权限?

提醒

我不希望出现此特定错误.或者是这个特定用例的解决方案.解决方案应足够通用,以便在进程之间共享不可移动的对象.可以在任何进程中创建对象.使所有对象可移动并保持身份的解决方案也可以是好的.

任何提示都是受欢迎的,任何指向如何实现解决方案的部分解决方案或代码片段都是值得的.所以我们可以一起创建解决方案.

以下是尝试解决此问题,但没有多处理:https://github.com/niccokunzmann/pynet/blob/master/documentation/done/tools.rst

问题

你希望其他进程对引用做什么?

引用可以传递给使用多处理创建的任何其他进程(重复3).可以访问属性,调用引用.访问的属性可能是也可能不是代理.

使用代理有什么问题?

也许没有问题,但挑战.我的印象是代理有一个管理器,管理器有自己的进程,因此必须序列化和转移不可序列化的对象(部分用StacklessPython/fork解决).还存在特殊对象的代理 - 为所有对象(可解决的)构建代理很难但不是不可能的.

解? - 代理+经理?

Eric Urban表明序列化不是问题.真正的挑战在于Example2&3:状态的同步.我对解决方案的想法是为经理创建一个特殊的代理类.这个代理类

  1. 为不可序列化的对象采用构造函数
  2. 获取可序列化对象并将其传输到管理器进程.
  3. (问题)根据1.必须在经理过程中创建不可序列化的对象.

python proxy multiprocessing python-3.x concurrent.futures

13
推荐指数
2
解决办法
7533
查看次数

docker-compose 有两个容器:web 无法连接到 db

docker-compose 无法构建 web 组件,因为它无法连接到之前创建的 db 组件

Mac OSX 10.13.6、conda 4.5.11、Python 3.6.8、Docker 版本 18.09.1、docker-compose 版本 1.23.2

django 1.8.3 与 Dockerfile 中的 requirements.txt 一起安装。不能随意升级。

关于 SO 的几个非常相似的讨论没有帮助(比如这个:Docker-compose with django could not translate host name "db" to address: Name or service not known)。

我有一个docker-compose.yml网络和两个组件:

version: '3'
networks:
  bridge:
   driver: bridge
services:
  db:
    image: postgres:10
    container_name: myapp-db
    volumes:
      - ./postgres_data:/var/lib/postgresql/data/
    ports:
      - "5432:5432"
    environment:
     POSTGRES_DB: actionability-master
     POSTGRES_PASSWORD: postgres
     POSTGRES_USER: postgres
    networks:
      - bridge


  web:
    restart: unless-stopped
    container_name: myapp-web
    build: . …
Run Code Online (Sandbox Code Playgroud)

django postgresql containers docker docker-compose

9
推荐指数
1
解决办法
9550
查看次数

在更改vm原语时调试VM中的解释器

上下文

作为一个大学项目,我们想要改变pharo vm以使用对象表,看看会发生什么.

我们使用来自github和VMMaker 的pharo-vm克隆.构建VM工作正常.

为了开始,我们添加了一个返回增量Integer的原语:

InterpreterPrimitives>>primitiveIntegerIncrement
    "increments an integer"
    self pushInteger: self popInteger + 1 .
Run Code Online (Sandbox Code Playgroud)

StackInterpreter class>>initializePrimitiveTable据此修改

MaxPrimitiveIndex := 576.
"... and so on ..."
    (575 primitiveFail)
    (576 primitiveIntegerIncrement))
Run Code Online (Sandbox Code Playgroud)

它有效.

问题

当我们对VM进行更改时,我们想要在SmalltalkImage中进行测试运行,因此我们不需要编译并看到它不起作用.

就像是:

StackInterpreter test: '1 inc'
Run Code Online (Sandbox Code Playgroud)

如果原语错误或发生错误,我可以调试.当然需要做得更多,但我怎样才能做到这一点?

我们尝试了什么

  1. VMMaker-InterpreterSimulationStackInterpreterSimulator.尝试评论中的代码

    DoIt
        ^ (StackInterpreterSimulator new openOn: Smalltalk imageName) test 
    
    Run Code Online (Sandbox Code Playgroud)

    错误:

        displayForm := 'Display has not yet been installed' asDisplayText form.
    
    Run Code Online (Sandbox Code Playgroud)

    ByteString不明白 asDisplayText

  2. (CogVMSimulator new openOn: Smalltalk imageName) test 
    (InterpreterSimulator …
    Run Code Online (Sandbox Code Playgroud)

smalltalk squeak pharo vm-implementation

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

我无法理解我的travis构建有什么问题

我第一次玩travis-ci并遇到一个令我困惑的错误.

下面是我的.travis.yml,它在linted时验证.

language: node_js
node_js:
  - 0.8

after_script:
  - echo "Hello World"
Run Code Online (Sandbox Code Playgroud)

以下是我的travis构建输出:

$ git clone --depth=50 --branch=master git://github.com/iancrowther/travis-experiment.git iancrowther/travis-experiment
Cloning into 'iancrowther/travis-experiment'...
remote: Counting objects: 27, done.
remote: Compressing objects: 100% (21/21), done.
remote: Total 27 (delta 2), reused 20 (delta 0)
Receiving objects: 100% (27/27), done.
Resolving deltas: 100% (2/2), done.
$ cd iancrowther/travis-experiment
git.2
$ git checkout -qf xxx
$ nvm use 0.8
Now using node v0.8.22
$ node --version
v0.8.22
$ npm --version
1.2.14
$ make …
Run Code Online (Sandbox Code Playgroud)

travis-ci

4
推荐指数
1
解决办法
3296
查看次数

python-服务器如何启动与客户端的连接

因此,我创建了一个应用程序,其中该应用程序连接到服务器并告诉它执行某些操作。但是,服务器需要大量时间来完成该操作(例如一个小时左右)。因此,将客户端长时间连接到服务器没有任何意义。我希望服务器必须创建与客户端的连接,以告知他已准备好交付最终结果。然后,在连接之后,他将数据发送到客户端。

我在这里想两个想法:

  1. 我也可以在客户端上创建服务器,并且客户端可以侦听服务器连接。但是,我的客户通常是一些资源有限的桌面应用或移动应用,其中一些还位于防火墙/ NAT之后。因此,即使他们正在运行服务器,我也不确定我的主服务器是否能够连接到它们。

  2. 客户可以定期检查结果是否准备就绪。这样,客户端不必维护任何服务器或任何东西。它将是普通的旧客户端服务器体系结构。但这会浪费大量不必要的流量,因为结果可能会在几分钟到几小时内出现。客户端不断固定服务器对我来说似乎并不好。

我首先不知道从哪里开始或用谷歌搜索这些东西。我知道存在这种情况是因为我经常看到诸如“ Skype”之类的服务器通知我的桌面应用程序我有新朋友请求,或者是Gmail通知系统,其中Google会在收到新邮件时在我的桌面上显示一条消息。

大多数Google搜索在客户端连接到服务器时会产生相同的内容。但是这里的情况恰恰相反。

如果这个问题不符合标准,那么一些参考文献也不错,我将删除此帖子。我很可能没有在思考并且变得愚蠢。请帮忙。谢谢。

python client-server python-3.x

4
推荐指数
1
解决办法
1166
查看次数

如果不存在则生成方法

上下文

我有一个带有方法的C#类PyroProxycall(string method, params object[] arguments)

public class PyroProxy : IDisposable {

    public object call(string method, params object[] arguments)
}
Run Code Online (Sandbox Code Playgroud)

这是远程对象的proxist类.

动机

始终使用call方法在代码中看起来不太好.

假设PyroProxy类没有方法test_method().如何使以下代码有效?

PyroProxy p = new PyroProxy();
p.test_method();
Run Code Online (Sandbox Code Playgroud)

test_method看起来像的代码

public object test_method(params object[] arguments) {
    return call("test_method", arguments); // you get the point
}
Run Code Online (Sandbox Code Playgroud)

这可能是我没有找到的重复,也许在编译时或运行时可能.我能做些什么才能更接近这个目标?提示非常感谢.有关如何注入方法的答案.我找到了ExpandoObject,但它并没有告诉我如何创建未知方法.

c# methods proxy dynamic

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

dict没有引用元素?Python2.7改变了行为

举个例子:

>>> import gc
>>> d = { 1 : object() }
>>> gc.get_referrers(d[1])
[] # Python 2.7
[{1: <object object at 0x003A0468>}] # Python 2.5
Run Code Online (Sandbox Code Playgroud)

为什么d不列为refererrer到对象?

EDIT1:虽然d中的dict引用了对象,为什么没有列出dictionairy?

python garbage-collection reference python-2.x python-2.7

2
推荐指数
1
解决办法
120
查看次数

如何使用不同大小的 host_subplots 保存我的图形?

我看到很多例子解释了如何以不同的大小保存绘图,但没有一个使用 host_subplots。我想将图形保存为当我最大化首先出现绘图的窗口时的样子。以下块是我一直在做的较短版本:

>>> import matplotlib.pyplot as plt
>>> import mpl_toolkits.axisartist as AA
>>> from mpl_toolkits.axes_grid1 import host_subplot
>>> 
>>> host = host_subplot(111, axes_class = AA.Axes)
>>> plt.subplots_adjust(right=0.75)
>>> 
>>> time = [1, 2, 3, 4, 5]
>>> velocity = [2, 4, 6, 8, 10]
>>> another_variable = [15, 20, 25, 40, 55]
>>> 
>>> S1, = host.plot(time,velocity, color = 'r')
>>> 
>>> par1 = host.twinx()
>>> S2, = par1.plot(time, another_variable, color = 'g')
>>> 
>>> plt.savefig('my_plot.png')
Run Code Online (Sandbox Code Playgroud)

然后我得到了以正常大小保存的图形!提前致谢!

python matplotlib python-2.7

2
推荐指数
1
解决办法
1435
查看次数

修复Python中的错误?

我有一份清单,

L = [['First', 'Last', 'GPA', 'Major', 'Drops'],
['Jane', 'Doe', '3.5', 'CS', '2'], ['Joe', 'Doe', '2.0', 'CpE', '0'],
['Todd', 'Brown', '3.88', 'CS', '5'], 
['Mike', 'Smith', '3.88', 'CS', '5']]
Run Code Online (Sandbox Code Playgroud)

我要将它打印在如下表格中:

    --------------------------------------------------------
    |     First|      Last|       GPA|     Major|     Drops|
    --------------------------------------------------------
    |      Jane|       Doe|      3.50|        CS|         2|
    |       Joe|       Doe|      2.00|       CpE|         0|
    |      Todd|     Brown|      3.88|        CS|         5|
    |      Mike|     Smith|      3.88|        CS|         5|
Run Code Online (Sandbox Code Playgroud)

我的代码到目前为止:

    L = [['First', 'Last', 'GPA', 'Major', 'Drops'],
     ['Jane', 'Doe', '3.5', 'CS', '2'],
     ['Joe', 'Doe', '2.0', 'CpE', '0'],
     ['Todd', …
Run Code Online (Sandbox Code Playgroud)

python formatting list python-3.x

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