小编Man*_*aux的帖子

取消会话中的对象

是否可以从SQLAlchemy会话中取消绑定对象?

我习惯了deepcopy,但是因为在使用关联代理时这似乎不可能,我正在寻找另一种解决方案来从会话中删除对象以将其添加到另一个.

python sqlalchemy

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

多处理的Python ssl问题

我想从多个客户端子进程的TLS TCP套接字中将数据从客户端发送到服务器,因此我与所有子进程共享相同的ssl套接字.通信适用于一个子进程,但如果我使用多个子ssl.SSLError进程,则TLS服务器崩溃(SSL3_GET_RECORD:解密失败或错误记录mac).

更具体:它不依赖于哪个进程首先调用该SSLSocket.write()方法,但此进程是此时唯一可以调用它的进程.如果另一个进程调用write(),服务器将导致上述异常.

我使用了这个基本代码:

tlsserver.py

import socket, ssl

def deal_with_client(connstream):
    data = connstream.read()
    while data:
        print data
        data = connstream.read()
    connstream.close()

bindsocket = socket.socket()
bindsocket.bind(('127.0.0.1', 9998))
bindsocket.listen(5)

while True:
    newsocket, fromaddr = bindsocket.accept()
    connstream = ssl.wrap_socket(newsocket,
                                server_side=True,
                                certfile="srv.crt",
                                keyfile="srv.key",
                                ssl_version=ssl.PROTOCOL_TLSv1)
    deal_with_client(connstream)
Run Code Online (Sandbox Code Playgroud)

tlsclient.py

import socket, ssl
import multiprocessing

class SubProc:
    def __init__(self, sock):
        self.sock = sock

    def do(self):
        self.sock.write("Test")

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

ssl_sock = ssl.wrap_socket(s)
ssl_sock.connect(('127.0.0.1', 9998))

print "Connected to", repr(ssl_sock.getpeername())

for x …
Run Code Online (Sandbox Code Playgroud)

python ssl multiprocessing

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

SqlAlchemy和Multiprocessing

我使用SqlAlchemy连接到我的数据库后端,并在我的Python应用程序中大量使用多处理.我遇到了一种情况,需要从一个进程传递一个对象引用,这是数据库查询的结果.

这是一个问题,因为在访问对象的属性时,SqlAlchemy尝试将对象重新附加到另一个进程的当前会话中,该进程因异常而失败,因为该对象附加在另一个会话中:

InvalidRequestError: Object '<Field at 0x9af3e4c>' is already attached to session '148848780' (this is '159831148')
Run Code Online (Sandbox Code Playgroud)

处理这种情况的方法是什么?是否可以从第一个会话中分离对象或克隆没有ORM相关内容的对象?

python orm sqlalchemy multiprocessing

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

从SQLAlchemy会话中清除对象

我想将映射类的实例传递给非SQLAlchemy感知方法(在另一个进程中),并且只需要我的属性的值.问题是,UnboundExecutionError每次方法想要读取属性值时都会发生.我明白,为什么会发生这种情况,但我想为这个问题找到解决方案.

我只需要我定义的属性的值(示例中的id,namedirty),并且不需要目标方法中的SQLAlchemy开销.

示例类:

Base = declarative_base()
class Record(Base):
    __tablename__ = 'records'
    _id = Column('id', Integer, primary_key=True)
    _name = Column('name', String(50))
    _dirty = Column('dirty', Boolean, index=True)

    @synonym_for('_id')
    @property
    def id(self):
        return self._id

    @property
    def name(self):
        return self._name

    @name.setter
    def name(self, value):
        self._name = value
        self._dirty = True

    name = synonym('_name', descriptor=name)

    @synonym_for('_dirty')
    @property
    def dirty(self):
        return self._dirty
Run Code Online (Sandbox Code Playgroud)

示例电话:

...
def do_it(self):
    records = self.query.filter(Record.dirty == True)
    for record in records:
        pass_to_other_process(record)
Run Code Online (Sandbox Code Playgroud)

我已经尝试使用session.expunge() …

python sqlalchemy

7
推荐指数
2
解决办法
7771
查看次数

使用强类型数据集在关系中插入行

我在C#(.NET 3.5)中使用ADO.NET和强类型数据集.我想在两个表中插入一个新行,这两个表在1:n关系中相关.

该表Attachments保存关系的主键部分,表LicenseAttachments保存外键部分.

AttachmentsDataSet.InvoiceRow invoice; // Set to a valid row, also referenced in InvoiceAttachments
AttachmentsDataSet.AttachmentsRow attachment;
attachment = attachmentsDataSet.Attachments.AddAttachmentsRow("Name", "Description");
attachmentsDataSet.InvoiceAttachments.AddInvoiceAttachmentsRow(invoice, attachment);
Run Code Online (Sandbox Code Playgroud)

当然,当我第一次更新InvoicesAttachments表时,我将从SQL服务器中获取外键违规,因此我尝试Attachments首先更新表,这将创建行,但将删除InvoiceAttachments表中的附件关联.为什么?

我该如何解决这个问题?

.net c# database ado.net strongly-typed-dataset

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

将Python字符串转换为其ASCII表示形式

如何将Python中的字符串转换为ASCII十六进制表示符?

例如:我想导致'\x00\x1b\xd4}\xa4\xf3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'001bd47da4f3.

python

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

阻止特定 save() 调用的信号发送

当收到信号时,我正在对模型的对象执行一些持久性操作post_save,其中包括对save(). 显然,该save()调用发送了一个post_save信号,我正在信号递归中着陆。

\n\n

post_save有没有办法阻止 Django在特定调用上发送信号save()?或者我可以在信号回调中检测到呼叫是否“循环”?

\n\n

那不起作用

\n\n

我尝试通过添加属性来修改模型的对象,但似乎django.db.models.base.Model.save_base将“净化”对象传递给信号回调,该回调不再包含该属性:

\n\n
def callback(sender, **kwargs):\n    instance = kwargs[\'instance\']\n    if not hasattr(instance, \'no_signal\'):\n        # (...) Perform actions\n        instance.no_signal = True\n        instance.save()\npost_save.connect(callback, dispatch_uid=\'post_save_callback\')\n
Run Code Online (Sandbox Code Playgroud)\n\n

背景

\n\n

完整的情况比仅仅接收信号、修改对象并持久化要复杂一些。事实上,我有两个相同的 Django 实例(在不同的服务器上),它们交换创建或修改的对象(通过 \xc3\x98MQ)并将其保存在自己的数据库中。我不想使用任何类型的数据库同步,因为应用程序需要易于部署,甚至应该与 sqlite 一起使用。

\n\n

由于这应该适用于所有模型,无论它们是否是通过视图或管理应用程序修改/创建的,我更愿意找到一种使用信号的方法,post_save而不是引入自己的信号,这需要在不同的点触发在项目(包括User模型)中。

\n

python django django-signals django-models

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

Python共享的字符串内存用于多处理

我正在尝试在我的Python进程之间使用共享的字符串变量,但是由于获取了核心转储和无效的内存值,看来我做错了什么。

multiprocessing.Value用来创建一个ctypes.c_char_p值,并使用value属性来访问它。在我对Python文档的理解中,值属性应该是同步的,只要它是的实例Value(与的实例相反RawValue)即可。到目前为止,对吗?

我创建了一个简短的示例来演示我的用法Value并在执行时显示不一致之处:

from multiprocessing import Process, Value
from ctypes import c_char_p

def process(v):
    while True:
        val = v.value
        print val
        while val == v.value:
            pass

v = Value(c_char_p, None)
p = Process(target=process, args=(v,))
p.start()

for i in range(1,999):
    v.value = str(i)

p.terminate()
Run Code Online (Sandbox Code Playgroud)

python synchronization multiprocessing

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

__import __()调用__init__.py两次?

我只是想知道为什么在加载包时__import__()调用__init__模块两次.

test.py
testpkg/
        __init__.py
Run Code Online (Sandbox Code Playgroud)

test.py:

pkg = __import__("testpkg", fromlist=[''])
Run Code Online (Sandbox Code Playgroud)

__init__.py:

print "Called."
Run Code Online (Sandbox Code Playgroud)

打完电话后python test.py,调用.将被打印两次.为什么python执行__init__两次"模块"?

python

3
推荐指数
2
解决办法
1106
查看次数

postgres声明变量不在函数中

我想在postgres中声明变量但不在函数中...

Declare
    c varchar;
    a integer;
    b integer;

    select b = count (*) from table

    set a = 1
        while a <= b  
begin 

    select c = [c] from table where id = a

    if (c = '1')
        insert into table2 select(*) from table

end


set a = a+1
Run Code Online (Sandbox Code Playgroud)

但错误错误:"varchar"或附近的语法错误第2行:c varchar; 我希望任何人都可以帮助我

postgresql variables declare

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

将"this"传递给基础构造函数

有没有办法将"this"传递给基础构造函数?

abstract class Base<TSelf>
{
    public ICollection<TSelf> List;

    public Base(ICollection<TSelf> list, TSelf self)
    {
        List = list;
        List.Add(self);
    }
}

class Implementation : Base<Implementation>
{
    public Implementation() : base(new List<Implementation>(), this)
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

显然Implementation,this传递到的构造函数中存在编译错误base.

我也没有看到任何方式listBase级别实例化.

c#

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

在严格模式下将STDIN分配给变量

使用时,以下代码完全按预期工作no strict:

my $file = STDIN;
while (<$file>) {
    print "$_\n";
}
Run Code Online (Sandbox Code Playgroud)

如何使用平等的解决方案use strict;


到目前为止,我已经试过:${STDIN},$STDIN,\$STDIN,<STDIN>,和\STDIN,而据我所知,在过去两个运营商(<>\)有不同的含义,比我想在这里使用.

究竟是什么样的变量STDIN?它被认为是标量吗?

perl strict

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

将Type变量的值强制为特殊基类型

我通过强制模块实现一个抽象类来实现我的模块系统,该抽象类包含将由基础应用程序调用的必需方法.现在我想实现每个模块的配置表单.我想过将表单的类型作为模块框架类的属性返回:

public abstract class Module
{
    public abstract Type ConfigurationForm { get; }
}
Run Code Online (Sandbox Code Playgroud)

在显示配置表单时,我只是实例化一个这种类型的Form并调用该Show()方法.

问题是,我想强制模块返回一个类型,它是一个子类System.Windows.Forms.Form,否则调用会失败.执行此操作的正确方法是什么?

我想过将ConfigurationForm属性封装在另一个属性中,该属性检查它是否继承Form,但我不认为这是一种干净的方法来实现这一点.

.net c# reflection module

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