小编Alo*_*nme的帖子

从 str 和 Enum 继承有哪些注意事项

str使用从和继承的类有哪些注意事项(如果有)Enum?

这被列为解决将 Enum 成员序列化为 JSON问题的可能方法

from enum import Enum

class LogLevel(str, Enum):
    DEBUG = 'DEBUG'
    INFO = 'INFO'
Run Code Online (Sandbox Code Playgroud)

当然,重点是使用此类作为枚举,具有其所有优点

python enums multiple-inheritance python-3.x

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

是否可以在多处理中运行 `mock.patch` 函数(使用 `spawn`)?

是否可以mock.patch在子进程中运行一个函数,该子进程是使用设置为的multiprocessing模块创建的?start methodspawn

如果没有修补子进程forked的解决方案,那么绕过这个问题的正确解决方案是什么?

重要的是要说改用 fork 并不能解决我的问题。从 python3.8-macOS 开始,多处理启动方法的默认行为是spawn.

从multiprocessing文档:

Changed in version 3.8: On macOS, the spawn start method is now the default. The fork start method should be considered unsafe as it can lead to crashes of the subprocess. See bpo-33725..

示例代码(在 python >= 3.8 的 macos 上运行):

import multiprocessing
import unittest
from unittest import mock


def baz(i):
    print(i)


def bar(i):  #  Middle function to avoid …
Run Code Online (Sandbox Code Playgroud)

python macos mocking python-multiprocessing python-3.8

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

如何更改多处理模块使用的序列化方法?

如何更改 Pythonmultiprocessing库使用的序列化方法?特别是,默认序列化方法使用pickle具有该版本 Python 的默认 pickle 协议版本的库。默认的 pickle 协议在 Python 2.7 中是版本 2,在 Python 3.6 中是版本 3。如何在 Python 3.6 中将协议版本设置为 2,以便我可以使用库中的一些类(如Client和Listener)在multiprocessingPython 2.7 运行的服务器处理和 Python 3.6 运行的客户端进程之间进行通信?

(旁注:作为测试,我修改了第 206 行multiprocessing/connection.py,添加protocol=2到dump()调用中以强制协议版本为 2,并且我的客户端/服务器进程在我有限的测试中工作,服务器由 2.7 运行,客户端由 3.6 运行)。

在 Python 3.6 中,合并了一个补丁来设置序列化程序,但是该补丁没有记录,我还没有弄清楚如何使用它。这是我尝试使用它的方式(我也将其发布到我链接到的 Python 票证上):

pickle2reducer.py:

from multiprocessing.reduction import ForkingPickler, AbstractReducer

class ForkingPickler2(ForkingPickler):
    def __init__(self, *args):
        if len(args) > 1:
            args[1] = 2
        else:
            args.append(2)
        super().__init__(*args)

    @classmethod …
Run Code Online (Sandbox Code Playgroud)

python serialization pickle python-multiprocessing

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

Android:su不影响组

我正在尝试在 android 7.1 上访问/proc/{PID}(或运行 ps)我的应用程序中的另一个进程。由于此补丁,我无法访问其他 PID 上的任何数据:

https://android-review.googlesource.com/c/platform/system/core/+/181345

我以为通过运行 su,我将能够访问 /proc,但我不能。即使我将用户切换到所述应用程序的用户,我也可以使用 ADB shell 访问 /proc。

groups从 adb shell运行:

> generic:/ # groups
uid=0(root) gid=0(root) groups=0(root)input log adb sdcard_rw sdcard_r net_bt_admin net_bt inet net_bw_stats readproc
Run Code Online (Sandbox Code Playgroud)

groups切换到应用程序用户后从 adb运行:

generic:/ # su u0_a56
generic:/ $ groups
uid=10056(u0_a56) gid=10056(u0_a56) groups=10056(u0_a56)input log adb sdcard_rw sdcard_r net_bt_admin net_bt inet net_bw_stats readproc
Run Code Online (Sandbox Code Playgroud)

groups从应用程序内部运行:

uid=10056(u0_a56) gid=10056(u0_a56) groups=10056(u0_a56)everybody all_a56
Run Code Online (Sandbox Code Playgroud)

groups运行 su 后从应用程序内部运行:

uid=0(root) gid=0(root) groups=0(root)everybody all_a56
Run Code Online (Sandbox Code Playgroud)

为什么 su 更改 gid 但不更改我所在的实际组?

linux android su adb

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

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

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

在 GCP 计算中阻止端口 22 后如何恢复 ssh 连接

我不小心运行了命令:

   sudo ufw deny 22
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?使用 ssh 是不可能的。

google-cloud-platform

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