小编use*_*323的帖子

Python试图在*args之后放置关键字参数

我对使用有点困惑*args.

我想编写一个函数,它接受可变数量的参数,但仍然可以使用为关键字参数定义预定义值的优点.

但是编写这样的函数是不可能的:

def foo(*args, bar = "foo"):
    print bar, args
Run Code Online (Sandbox Code Playgroud)

它可以像这样写:

def foo2(bar = "foo", *args):
    print bar, args
Run Code Online (Sandbox Code Playgroud)

但后来我调用foo2并传递了第一个参数,它覆盖了bar!的默认值.

foo2("somevalue")
somevalue ()
Run Code Online (Sandbox Code Playgroud)

这样做的方式更好吗?

我知道我可以这样写:

def foo(*args, **kwargs):
    kwargs["bar"] = "foo"
Run Code Online (Sandbox Code Playgroud)

但是从我的角度来看,类似于第一个方法定义(产生语法错误)的内容更直观.

python python-2.x variadic-functions keyword-argument

12
推荐指数
2
解决办法
5154
查看次数

GRPC 流选择(python)

假设我想创建一个类似聊天的应用程序。客户端可以向服务器发送文本,反之亦然。文本交换的顺序可以是任意的。

服务器依赖于另一个控制服务器响应流的流。GRPC 流作为 python 生成器公开。服务器现在如何同时等待客户端输入和另一个流上的输入?通常人们会使用 select() 之类的东西,但这里我们有生成器。

我有一些示例代码,它实现了想要的行为,但在客户端和服务器端需要一个额外的线程。如何在没有线程的情况下获得相同的结果?

原型:

syntax = 'proto3';

service Scenario {
    rpc Chat(stream DPong) returns (stream DPong) {}
}

message DPong {
    string name = 1;
}
Run Code Online (Sandbox Code Playgroud)

服务器:

import random
import string
import threading

import grpc

import scenario_pb2_grpc
import scenario_pb2
import time
from concurrent import futures

class Scenario(scenario_pb2_grpc.ScenarioServicer):

    def Chat(self, request_iterator, context):
        def stream():
            while 1:
                time.sleep(1)
                yield random.choice(string.ascii_letters)

        output_stream = stream()

        def read_incoming():
            while 1:
                received = next(request_iterator)
                print('received: {}'.format(received))

        thread = threading.Thread(target=read_incoming)
        thread.daemon = …
Run Code Online (Sandbox Code Playgroud)

python grpc

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

芹菜工人没有消耗足够的任务

我和Celery有一个奇怪的问题.

我使用RabbitMQ作为消息代理和结果后端.

任务通过pickle序列化,但它们只获取数据库中文件的id.他们获取它,对它做一些工作并将结果写回数据库.我只是将id存储在结果后端.

我使用一个组来提供任务,并且不从其中运行任何子任务.

我有一个并发= 8的工人(prefork)

如果我启动任务,则所有8个进程都在工作(100%cpu使用率).

第一个任务完成后,奇怪的行为就开始了.该过程不会开始新任务.任务get初始化(我使用CELERYD_MAX_TASKS_PER_CHILD = 1)但是不会调用run方法.

所以问题是,并非所有流程都在运行.

尝试了许多配置设置但没有改变此行为.

你有什么主意吗?

它不是数据库等.本地运行消息代理和数据库.还看了一下有花的工人,它说大部分时间大约有4个过程都是活跃的.其他任务是保留的,但不要启动.

希望你能帮助我!

python rabbitmq celery

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

C程序奇怪的行为 - 指针和内存

我昨天花了几个小时在程序中找到一个错误.我可以将其分解为以下内容.代码没有多大意义.但问题是,如果我遗漏了这条线

BST root2 = (BST) malloc(sizeof(BST));
Run Code Online (Sandbox Code Playgroud)

在函数fillTree()中,程序执行它应该执行的操作.但是取消注释该行会导致fillTree()中BST root3的数据字段从NULL变为不同的值.但我不明白为什么会这样.

所以没有注释我得到以下输出:

root3->data is still null!
Run Code Online (Sandbox Code Playgroud)

但它应该(行评论):

root3->data is still null!
root3->data is still null!
root3->data is still null!
root3->data is still null!
Run Code Online (Sandbox Code Playgroud)

请帮我!

非常感谢你!

#include <stdio.h>
#include <stdlib.h>

typedef struct BSTTag{
  struct BSTTag* lNode;
  struct BSTTag* rNode;
  void *data;
  int (*compare)(void*, void*);
} *BST;


BST createTree(BST root) {
  if(root == NULL) {
    BST bst = (BST) malloc(sizeof(BST));
    bst->lNode = NULL;
    bst->rNode = NULL;
    bst->data = NULL;
    return bst;
  }
  return root;
} …
Run Code Online (Sandbox Code Playgroud)

c memory pointers

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