小编Ale*_*voy的帖子

Python套接字(套接字错误坏文件描述符)

以下receiveFile()函数从套接字读取文件名和文件数据,并使用分隔符将其拆分$.

但我无法关闭套接字并Bad file descriptor引发错误.如果我注释掉self.server_socket.close()语句,那么没有错误,但套接字正在永远监听.

码:-

def listen(self):
    self.server_socket.listen(10)
    while True:
        client_socket, address = self.server_socket.accept()
        print 'connected to', address
        self.receiveFile(client_socket)



def receiveFile(self,sock):
    data = sock.recv(1024)
    data = data.split("$");
    print 'filename', data[0]
    f = open(data[0], "wb")
    #data = sock.recv(1024)
    print 'the data is', data[1]
    f.write(data[1])
    data = sock.recv(1024)
    while (data):
        f.write(data)
        data=sock.recv(1024)
    f.close()
    self.server_socket.close()
    print 'the data is', data
    print "File Downloaded"
Run Code Online (Sandbox Code Playgroud)

追溯:-

Traceback (most recent call last):
  File "server.py", line 45, in <module> …
Run Code Online (Sandbox Code Playgroud)

python sockets

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

将python watchdog与多处理或线程相结合

我正在使用Python的Watchdog监视给定目录中正在创建的新文件.创建文件时,会运行一些代码生成子进程shell命令以运行不同的代码来处理此文件.这应该为每个创建的新文件运行.我已经在创建一个文件时对此进行了测试,并且工作正常,但是在创建多个文件时,无论是同时还是一个接一个地创建它都很困难.

我当前的问题是这个...在shell中运行的处理代码需要一段时间才能运行,并且在目录中创建新文件之前不会完成.我无能为力.在此代码运行时,看门狗将无法识别已创建新文件,并且不会继续执行该代码.

所以我认为我需要为每个新文件生成一个新进程,或者做一些事情来同时运行,而不是等到一个文件完成后再处理下一个文件.

所以我的问题是:

1.)实际上,我将在一个目录中同时创建4个不同系列的文件.看门狗一次运行所有4个文件的文件创建代码的最佳方法是什么?

2.)当代码针对一个文件运行时,如何让监视程序开始处理同一系列中的下一个文件,而不必等到前一个文件的处理完成.这是必要的,因为文件是特定的,我需要暂停一个文件的处理,直到另一个文件完成,但它们的创建顺序可能会有所不同.

我是否需要以某种方式将看门狗与多处理或线程结合起来?或者我需要实现多个观察者?我有点不知所措.谢谢你的帮助.

class MonitorFiles(FileSystemEventHandler):
    '''Sub-class of watchdog event handler'''

    def __init__(self, config=None, log=None):
        self.log = log
        self.config = config

    def on_created(self, event):
        file = os.path.basename(event.src_path)
        self.log.info('Created file {0}'.format(event.src_path))
        dosWatch.go(event.src_path, self.config, self.log)

    def on_modified(self, event):
        file = os.path.basename(event.src_path)
        ext = os.path.splitext(file)[1]
        if ext == '.fits':
            self.log.warning('Modifying a FITS file is not allowed')
            return

    def on_deleted(self, event):
        self.log.critical('Nothing should ever be deleted from here!')
        return      
Run Code Online (Sandbox Code Playgroud)

主要监测

def monitor(config, log):
    '''Uses the Watchdog package to monitor …
Run Code Online (Sandbox Code Playgroud)

python watchdog multiprocessing python-multithreading

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

如何从 Django 中的 get_queryset 方法返回多个查询集对象或添加查询集结果

在我的 django 应用程序中,我定义了一个 ViewSet,它有一个 get_queryset 方法,如下所示:

class SampleViewSet(ReadOnlyModelViewSet):
    serializer_class = SampleSerializer
    permission_classes = (IsAuthorizedToAccess, )

    def get_queryset(self):
        queryset = Sample.objects.filter(submitted_by=self.request.user.id)
        queryset1 = Sample.objects.filter(submitted_by!=self.request.user.id) 
        return queryset
Run Code Online (Sandbox Code Playgroud)

这样我有两个查询集对象,第一个是用户提交的示例,第二个是其他用户提交的示例。这个 SampleViewSet 是从 ajax 请求调用的,我在其中使用返回的查询集对象。

您能帮助我如何退回这两个对象吗?

我尝试的是打印查询集对象,并尝试通过创建类似于查询集的 json 对象来愚弄 django。但看起来 django 在捕捉这一点方面非常聪明。

编辑:问题是我应该寻找 get_queryset 的替代方法,如 list() [来自 Django Rest 框架] 并使用 Httpresponse 返回 json,或者是否有一个真正的解决方案来俱乐部两个查询集对象并从这里返回。

python django django-rest-framework

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