小编Jan*_*cke的帖子

Python:在os.pipe()threadsafe上是os.read()/ os.write()吗?

考虑:

pipe_read, pipe_write = os.pipe()
Run Code Online (Sandbox Code Playgroud)

现在,我想知道两件事:

(1)我有两个主题.如果我保证只有一个正在阅读os.read(pipe_read,n)而另一个只是在写os.write(pipe_write),那么即使两个线程同时进行,我也会遇到任何问题吗?我会获得以正确顺序写入的所有数据吗?如果他们同时这样做会发生什么?是否有可能单个读取片段,例如?:

Thread 1: os.write(pipe_write, '1234567')
Thread 2: os.read(pipe_read,big_number) --> '123'
Thread 2: os.read(pipe_read,big_number) --> '4567'
Run Code Online (Sandbox Code Playgroud)

或者 - 再次考虑同时性 - 单个os.write(some_string)总是会完全由单个返回os.read(pipe_read, very_big_number)吗?

(2)考虑使用多个线程写入pipe_write管道的末尾logging.handlers.FileHandler()- 我已经读过记录模块是线程安全的.这是否意味着我可以做到这一点而不会丢失数据?我想我将无法控制管道中数据的顺序; 但这不是必需的.要求:

  • 写端的某些线程写入的所有数据必须在读端结束
  • 一个人写的字符串logger.info(), logger.error(), ...必须保持一个整体.

这些要求是否得到满足?

先感谢您,

Jan-Philip Gehrcke

python multithreading pipe thread-safety

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

心跳扩展:允许任意有效载荷是否有意义?

https://tools.ietf.org/html/rfc6520没有解释为什么心跳请求/响应往返应该包含有效负载.它只是指定有效载荷的空间,并且响应必须包含与请求相同的有效载荷.

这个有效载荷有什么用?我的问题是:

  • 当工程师设计协议以允许将任意有效负载包含在心跳请求中时,他们会想到什么?有什么好处?

  • 这个有效载荷必须包含在响应中的原因是什么?

我看到,通过允许任意有效负载,应用程序能够明确地将某个响应与某个请求匹配.这是唯一的优势吗?如果是,那么为什么没有强制有效载荷达到一定的长度呢?有效载荷长度的灵活性有多大?它是否与加密概念有关,因此心跳请求的长度必须是不可预测的?

其他"类似心跳"的协议扩展只是预先定义了确切的请求(例如"ping")和相应的响应(例如"pong").为什么https://tools.ietf.org/html/rfc6520采取不同的路线?

重要的是要理解RFC6520中做出的选择背后的原因,以便正确评估所有这些可能是智能放置的后门的假设.

security openssl heartbeat heartbleed-bug

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

如何在Python中传递5秒后使函数返回?

我想编写一个函数,该函数将在5秒后返回:

def myfunction():
    while passed_time < 5_seconds:
        do1()
        do2()
        do3()
        .
        .
    return
Run Code Online (Sandbox Code Playgroud)

我的意思是,此功能仅运行5秒钟,在5秒钟后,它应结束并继续使用其他功能:

myfunction()
otherfunction()   ----> This should start 5 seconds after myfunction() is executed.
Run Code Online (Sandbox Code Playgroud)

最好的祝福

python time function

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

py.test:如何在子进程中自动检测异常?

我正在大量使用多处理的模块环境中在Linux上运行py.test。子进程中的异常不会检测为错误。测试文件示例pytest_mp_test.py

import multiprocessing

def test_mp():
    p = multiprocessing.Process(target=child)
    p.start()
    p.join()

def child():
    assert False
Run Code Online (Sandbox Code Playgroud)

执行:

$ py.test pytest_mp_test.py 
================================== test session starts ===================================
platform linux2 -- Python 2.7.3 -- pytest-2.3.3
plugins: cov
collected 1 items 

pytest_mp_test.py .

================================ 1 passed in 0.04 seconds ================================
Run Code Online (Sandbox Code Playgroud)

未检测到错误。使用以下命令调用时将打印异常-s

$ py.test -s pytest_mp_test.py 
================================== test session starts ===================================
platform linux2 -- Python 2.7.3 -- pytest-2.3.3
plugins: cov
collected 1 items 

pytest_mp_test.py Process Process-1:
Traceback (most recent call last):
  File "/apps11/bioinfp/Python-2.7.3/lib/python2.7/multiprocessing/process.py", …
Run Code Online (Sandbox Code Playgroud)

python testing multiprocessing pytest

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

这个规范的群体示例如何运作?

当必须通过文件系统同步程序(shell脚本)时,我发现了一个flock基于建议的解决方案(也应该在NFS上工作).从脚本(来自http://linux.die.net/man/1/flock)中使用的规范示例是:

(
flock -s 200

# ... commands executed under lock ...

) 200>/var/lock/mylockfile 
Run Code Online (Sandbox Code Playgroud)

我不太明白为什么整个构造确保原子性.具体地讲,我想知道以何种顺序flock -s 200200>/var/lock/mylockfile例如,当被执行bash执行这些代码行.这个订单是保证/确定性的吗?我理解它的方式,如果这个成语应该起作用,那一定是确定性的.但是由于子进程是在子进程中生成的,所以我不明白这两个进程是如何同步的.我只看到这两个命令之间的竞争条件.

如果有人能让我对此消失感到困惑并解释为什么这个结构可以用来安全地同步进程,我将不胜感激.

同时,如果有人知道,我会感兴趣的是选择一些任意文件描述符(例如200在示例中)是多么安全,特别是在具有许多客户端的大型NFS文件系统的上下文中.

linux bash synchronization nfs locking

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

查找python中较长字符串中是否存在短字符串的有效方法

我有一个短字符串文件,我已经加载到列表中short(有150万个长度为150的短字符串).我想找到代码中较长字符串(长度约为500万)的短字符串的数量seq.我使用以下明显的实现.但是,这似乎需要很长时间(大约一天)才能运行.

count1=count2=0
for line in short:
    count1+=1
    if line in seq:
            count2+=1
print str(count2) + ' of ' + str(count1) + ' strings are in long string.'
Run Code Online (Sandbox Code Playgroud)

有没有办法可以更有效地做到这一点?

python string performance find

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

如何在JavaScript中清除敏感内存?

我有一个登录表单供用户输入他/她的密码.此表单绑定到AngularJS模型.假设在相应的控制器中,用户指定的密码可通过$scope.password.

实际的登录过程由此函数调用处理:login($scope.email, $scope.password).在该过程之后,应用程序逻辑不再需要密码,我希望从浏览器的内存中清除它.

对我来说,最明显的问题是:login($scope.email, $scope.password)为了清除持有$scope.password当前绑定值的内存,我可以在调用后立即做什么?我希望这个问题对JavaScript有效.

但是,接下来,我还有两个特定于AngularJS的问题:

  • 密码表单值是否绑定到更多AngularJS内部变量而不仅仅是$scope.password?在这种情况下,覆盖$scope.password将没有帮助.

  • 切换视图时,与旧视图对应的控制器及其范围变为"销毁".在离开登录视图后,我是否应该在短时间内完全依赖垃圾收集来清除包含密码的内存?

javascript security angularjs

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

Python:检查两个Linux路径是否在同一物理磁盘上

现在我os.stat(path).st_dev用来获取设备ID.但是对于同一物理驱动器上的逻辑磁盘,id似乎不同.所以它实际上对我不起作用.是否有更好或直接的解决方案.

python linux disk-partitioning

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

NodeJS:如何从文件中读取(最多)前 N 个字节?

在 NodeJS 中,从文件中最多读取前 N 个字节的简洁、健壮且优雅的方法是什么?

  • 如果数据较少,那么我不希望抛出错误。
  • 如果有更多数据,那么我不希望将其读入内存。

理想情况下无需安装外部软件包。也许涉及自 NodeJS 12 以来似乎是新的(非实验性的)异步迭代器?

奖励:如何读取前 N 个字符,提供特定的编解码器(例如utf-8)?

编辑:根据我的互联网研究,这个确实相当基本的问题的答案远非显而易见,这就是我问的原因。我知道如何在其他语言环境中执行此操作,并且我是 NodeJS 生态系统的新手。

file node.js

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

JavaScript:如何重命名对象中的所有键(在第一级处理所有键)?

我想为对象中的第一级键添加前缀。

为了减少歧义,我希望能够展示 Python 中的字典理解如何是实现这一目标的优雅方法(我正在寻找 JavaScript 中的类似方法):

>>> old = {"a": 1, "b": 2}
>>> prefix = "_"
>>> new = {prefix + key: value for key, value in old.items()}
>>> new
{'_a': 1, '_b': 2}
Run Code Online (Sandbox Code Playgroud)

在现代 JavaScript 中,有什么同样优雅且特别可读的方法可以实现这一点,并且最好在 NodeJS 12 中使用?

javascript

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

合并字典而不覆盖,而是在密钥相等时添加值

有没有办法更新()一个字典而不是盲目地覆盖同一个键的值?例如,我想在我的策略中为相同的键添加值,如果我找到它,并连接如果找不到键.

d1 = {'eggs':3, 'ham':2, 'toast':1}
d2 = {'eggs':2,'ham':1}

dresult = d1.myUpdate(d2)

print dresult 
{'eggs':5,'ham':3,'toast':1}
Run Code Online (Sandbox Code Playgroud)

python merge dictionary

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

Python:可以isinstance(i,type(i))计算为False?

我正在寻找something下面的代码片段,以便在任何情况下isinstance()检查后评估True:

i = WonderfulClass()
classinfo_of_i = something(i)
isinstance(i, classinfo_of_i) # must evaluate to True
Run Code Online (Sandbox Code Playgroud)

如果type你的回答如此,如果你解释了原因,我将不胜感激.是type真正的对应物isinstance吗?或者,反过来问,你能想到一个isinstance(i, type(i))评估为False 的案例吗?

这个问题出现在检查列表或集合的元素是否是单一类型的简单方法的上下文中,我们必须通过序列并检查所有序列元素是否属于同一类型.在这种情况下,元素将相互比较.该比较可以基于type或基于isinstance.

相关文档有关isinstance(object, classinfo):

如果object参数是classinfo参数的实例,则返回true

python oop built-in

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

PIL:覆盖具有不同尺寸和宽高比的图像

我一直试图在python中叠加两个图像以匹配坐标,左上角和右下角具有相同的坐标,它们的方面几乎相同,只有几个像素.虽然它们的分辨率不同.

使用PIL我已经能够覆盖图像,但是在覆盖它们之后,图像输出是方形的但是分辨率是背景图像的分辨率,前景图像也被错误地重新调整大小(据我所见).我一定做错了什么.

import Image
from PIL import Image

#load images
background = Image.open('ndvi.png')
foreground = Image.open('out.png')

#resizing
foreground.thumbnail((643,597),Image.ANTIALIAS)
#overlay
background.paste(foreground, (0, 0), foreground)
#save
background.save("overlay.png")
#display
background.show()
Run Code Online (Sandbox Code Playgroud)

当将图像放入像powerpoint这样可怕的东西时,图像方面几乎完全相同.我已经包含了一个示例图像,左边的图像是我手工叠加的图像,右边的图像是python的输出.代码中某些点的背景被垂直压扁,也影响覆盖.我希望能够在python中做到这一点并使它看起来像左手图像.

在此输入图像描述

python python-imaging-library

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