小编dor*_*mon的帖子

Django:如何在模板中获取网站的根路径?

我想为我的网站设计一个返回主页按钮,如何在模板中获取我的网站的根路径,以便我可以这样做:

<a href="{{ root_url }}">Go back home</a>
Run Code Online (Sandbox Code Playgroud)

或者我应该首先在我的视图中找出路径,然后将其传递给模板以通过某些上下文进行渲染.谢谢.

python django

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

如何反转__m128类型变量?

我知道这应该是一个谷歌搜索问题,但我找不到答案.

说我有一个__m128变量a,其内容是a[0],a[1],a[2],a[3].有没有一种单一的,可以扭转它是功能a[3],a[2],a[1],a[0]

c c++ x86 sse simd

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

如何否定(改变符号)__m128类型变量中的浮点元素?

是否有任何单个指令或函数可以反转 __m128内每个浮点的符号?即a = r0:r1:r2:r3 ===> a = -r0:-r1:-r2:-r3

我知道这可以通过_mm_sub_ps(_mm_set1_ps(0.0),a),但是它是否可能很慢,因为它_mm_set1_ps(0.0)是一个多指令函数?

c x86 sse simd vectorization

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

__ne__是否使用重写的__eq__?

假设我有以下程序:

class A(object):                                                                                                                                                                                                                                                              
    def __eq__(self, other):
        return True

a0 = A() 
a1 = A() 
print a0 != a1
Run Code Online (Sandbox Code Playgroud)

如果你用Python运行它的输出是True.我的问题是

  1. __ne__方法未实现,Python是否属于默认方法?
  2. 如果Python落在默认方法上以确定两个对象是否相等,那么它是否应该调用__eq__然后否定结果?

python comparison equality

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

这几行作为C++中的一个小测试框架做了什么?

嗨,我正在阅读std::optional 这里的实现,我在其单元测试文件中找到以下行.

struct caller {
    template <class T> caller(T fun) { fun(); }
};
# define CAT2(X, Y) X ## Y
# define CAT(X, Y) CAT2(X, Y)
# define TEST(NAME) caller CAT(__VAR, __LINE__) = []
Run Code Online (Sandbox Code Playgroud)

我真的不明白这些线是做什么的.caller似乎是一个调用函数的模板,但它如何被用作caller CAT ...X ## Y这里的意思是什么?稍后在文件中,用户使用定义单元测试TEST,但它们不会出现在任何可执行代码中(我的意思是它们main至少不在函数中调用),所以我甚至不确定编译后的二进制文件是否实际运行了测试.你能解释一下这里发生了什么吗?谢谢!

编辑:非常确定在运行二进制文件时执行测试,但是如何实现?

c++ c++11

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

在编译时初始化静态 const std::map?

我在我的 C++ 程序中有一个查找表,现在我必须在程序开始时使用这样的东西初始化它:

static const map<string, int> m;
m["a"] = 1;
m["b"] = 2;
...
Run Code Online (Sandbox Code Playgroud)

我只是想知道是否有办法让这个初始化过程发生在编译时而不是运行时?我知道这对我的程序的性能影响很小。我只是好奇,在当前的 C++11/14/17 语义范围内,是否可能。

c++ stl c++11

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

conda build和conda install使用相同依赖性的不同版本,为什么?

在我们的CI流程中,我们执行以下操作:

  1. 为该CI管道创建全新的conda环境
  2. 使用创建conda包conda build,将输出文件夹设置为./build
  3. 使用安装新创建的软件包conda install -c ./build package_name

第二步是在CI的第二阶段中进行测试时,我们只需调用pytest即可在CI环境中并使用新安装的程序package_name包运行所有测试文件。

注意在meta.yaml文件中列出了定义包package_name的内部依赖项another_package_name

我们发现的一件事是,在步骤1和步骤2中,的版本another_package_name不同,在构建软件包时,conda似乎能够获取依赖关系的最新版本。但是,在第2步中,conda似乎正在选择该依赖项的旧版本。

我有一些其他发现:

  1. 双方package_nameanother_package_name发布到我们使用我们的内部通道的文件位置(使用普通的cp *.tar.bz2命令)
  2. 这仅在CI中发生,对特定的CI用户而言,并且仅在我们位于该CI文件夹中以及该CI环境中时才发生,这意味着使用其他用户,创建新环境,将./build文件夹复制到其他位置都将停止从重现这种行为。

这阻碍了我们拥有适当的功能CI。而且我们无法确定该local install步骤正在发生什么,以及为什么它选择了错误版本的依赖关系。

有任何想法吗?

python anaconda conda miniconda

5
推荐指数
0
解决办法
248
查看次数

run_in_executor 会阻塞吗?

假设我有一个这样的网络服务器:

from fastapi import FastAPI
import uvicorn
import asyncio

app = FastAPI()

def blocking_function():
    import time
    time.sleep(5)
    return 42

@app.get("/")
async def root():
    loop = asyncio.get_running_loop()

    result = await loop.run_in_executor(None, blocking_function)
    return result

@app.get("/ok")
async def ok():
    return {"ok": 1}

if __name__ == "__main__":
    uvicorn.run(app, host="0.0.0.0", workers=1)
Run Code Online (Sandbox Code Playgroud)

据我了解,该代码将在默认的 ThreadExecutorPool 中生成另一个线程,然后在线程池中执行阻塞函数。另一方面,考虑GIL是如何工作的,CPython解释器只会执行一个线程100 ticks,然后它会切换到另一个线程以公平,并给其他线程一个进步的机会。在这种情况下,如果 Python 解释器决定切换到正在执行 blocks_function 的线程怎么办?它会阻止 who 解释器等待剩余的任何内容time.sleep(5)吗?

我问这个的原因是,我观察到,有时我的应用程序将阻止的blocking_function,但我不能完全肯定在玩什么的这里我blocking_function是很特殊-它通过win32com库会谈到COM API对象。我试图排除这是我陷入的一些 GIL 陷阱。

python multithreading asynchronous python-asyncio fastapi

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

如何在Python中的多个异步进程之间进行同步?

我有一个使用 fastapi 的异步 http web 服务。我在服务器上的不同端口上运行同一服务的多个实例,并且前面有一个 nginx 服务器,因此我可以利用它们。我有一个特定的资源,需要保护只有一个客户端可以访问它。

@app.get("/do_something")
async def do_something():
     critical_section_here()
Run Code Online (Sandbox Code Playgroud)

我尝试使用如下文件锁来保护这个关键部分:

@app.get("/do_something")
async def do_something():
    with FileLock("dosomething.lock"):
        critical_section()
Run Code Online (Sandbox Code Playgroud)

这样可以防止多个进程同时进入临界区。但我发现这实际上会死锁。考虑以下事件:

  1. 客户端1连接8000端口并进入临界区
  2. 当客户端 1 仍在使用资源时,客户端 2 被路由到相同的端口 8000,然后它将尝试获取文件锁,但它不能,因此它将继续尝试,这将阻止客户端 1 的执行,而客户端 1 永远不会能够释放文件锁,这意味着不仅此进程被锁定,所有其他服务器实例也将被锁定。

有没有一种方法可以让我协调这些进程,以便只有其中一个进程访问关键部分?我想过为文件锁添加超时,但我真的不想拒绝用户,我只想等到轮到他/她进入临界区。

python synchronization file-locking multiprocessing python-asyncio

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

GDB:查看某个地址的程序集?

我正在开发一些 JIT 编译器,我正在使用 GDB 来首次亮相,我的代码在某个时刻崩溃(段错误),但它在 jitted 代码处崩溃(它们是动态生成的),所以我没有得到堆栈帧信息,但我得到以下回溯:

#0  0x0000000001d98f22 in ?? () // JITTED CODE
#1  0x000000000000001d in ?? () // JITTED CODE
#2  ...callattribuite function....
Run Code Online (Sandbox Code Playgroud)

我想知道 GDB 是否可以反汇编位置 0x0000000001d98f22 处的代码并将其显示给我。我尝试过disas 0x0000000001d98f22,但 GDB 抱怨No function contains specified address.


编辑:我自己也修复了这个问题,该disas命令需要一个结束地址才能正常工作。

debugging gcc jit gdb gnu

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