了解Python 多处理(来自PMOTW文章),并希望对该join()
方法的具体用途有所了解.
在2008年的一个旧教程中,它声明如果没有p.join()
下面代码中的调用,"子进程将处于空闲状态而不会终止,成为僵尸,你必须手动杀死".
from multiprocessing import Process
def say_hello(name='world'):
print "Hello, %s" % name
p = Process(target=say_hello)
p.start()
p.join()
Run Code Online (Sandbox Code Playgroud)
我添加了一个打印输出PID
以及一个time.sleep
测试,据我所知,该过程自行终止:
from multiprocessing import Process
import sys
import time
def say_hello(name='world'):
print "Hello, %s" % name
print 'Starting:', p.name, p.pid
sys.stdout.flush()
print 'Exiting :', p.name, p.pid
sys.stdout.flush()
time.sleep(20)
p = Process(target=say_hello)
p.start()
# no p.join()
Run Code Online (Sandbox Code Playgroud)
在20秒内:
936 ttys000 0:00.05 /Library/Frameworks/Python.framework/Versions/2.7/Reso
938 ttys000 0:00.00 /Library/Frameworks/Python.framework/Versions/2.7/Reso …
Run Code Online (Sandbox Code Playgroud) 根据O'Reilly的Python in a Nutshell中的Alex Martelli所说的复杂性类O(n) + O(n) = O(n)
.所以我相信它.但我很困惑.他解释说,"N的两个线性函数之和也是N的线性函数."
根据维基百科,在功能分析中,线性函数是线性映射,其中的一个例子f(x+y) = f(x) + f(y)
.在这里找到了一个似乎更简单的定义,简单地说,"线性函数是一个函数,其图形是一条直线." 它包含了一些比维基百科文章更不深奥的例子.
y = f(x) = a + bx
Run Code Online (Sandbox Code Playgroud)
和:
y = 25 + 5x
let x = 1
then
y = 25 + 5(1) = 30
let x = 3
then
y = 25 + 5(3) = 40
Run Code Online (Sandbox Code Playgroud)
也许可以公平地预期两个线性方程的总和可以在图上表示为直线,其显示类似于代表每一个的直线之间的平均值的东西.
所以我理解正确,即使在以下两个函数中,"复杂"函数的处理时间是"简单"函数的三倍,它们每个函数都以big-O表示为O(n),因为弧形处理时间的表示将由图/图上的直线,对角线表示,时间差表示为在图形表示中,更复杂函数的角度更锐利的事实?
from timer import Timer
def complex(it):
result = []
for i in it:
result.append(i) …
Run Code Online (Sandbox Code Playgroud) 下面的代码可以在我的 Xubuntu 机器上运行,但现在我在 Kubuntu 上,它不再工作了 - 它不会打开端口。
Arduino IDE 工作正常(可以向开发板写入代码),我可以在 Chrome 中选择设备 (Arduino Uno),但当我尝试打开端口时,代码将停止:Uncaught (in promise) DOMException: Failed to open serial port
或required member baudRate is undefined
将出现。
const filters = [
// Filter on devices with the Arduino Uno USB Vendor/Product IDs.
{ usbVendorId: 0x2341, usbProductId: 0x0043 },
{ usbVendorId: 0x2341, usbProductId: 0x0001 },
];
async function getPortAndStartReading() {
if (!portFound) {
const port = await navigator.serial.requestPort({ filters });
await port.open({ baudRate: 9600 }) //problem here
reader …
Run Code Online (Sandbox Code Playgroud) 使用Multiprocessing包中的Process和Pool模块,并不断访问该_bootstrap
方法的引用.
从我所看到的方法导入一个multiprocessing
util.py
模块,并使用它的方法(还有其他一些组合)来trace
,log
和manage
子进程.
def _bootstrap(self):
from . import util
global _current_process
try:
self._children = set()
self._counter = itertools.count(1)
try:
sys.stdin.close()
sys.stdin = open(os.devnull)
except (OSError, ValueError):
pass
_current_process = self
util._finalizer_registry.clear()
util._run_after_forkers()
util.info('child process calling self.run()')
try:
self.run()
exitcode = 0
finally:
util._exit_function()
except SystemExit, e:
if not e.args:
exitcode = 1
elif isinstance(e.args[0], int):
exitcode = e.args[0]
else:
sys.stderr.write(str(e.args[0]) + '\n')
sys.stderr.flush()
exitcode = 1
except:
exitcode = 1 …
Run Code Online (Sandbox Code Playgroud) 我正在寻找如何将第一组歌词与一个节和多个跟随。一直找不到例子。看看下面前八小节的歌词是如何不必要地重复的?
\version "2.18.2"
\header {
title = "Minimart"
subtitle = "Derived from Traditional Balkan Song: Rumelaj"
poet = "Text by Mike iLL"
}
melody = \relative c'' {
\clef treble
\key g \minor
\time 4/4
\repeat volta 2 { c4. b8 c b c( a) | r8 bes4 a8 bes( a) g r8 |
g a bes c d( c) bes c | g a4 a8 a4 a8 r8 | }
\repeat volta 2 { d8 cis d c d …
Run Code Online (Sandbox Code Playgroud) 作为一个非常新的os和命令行进程的php程序员,我很惊讶在python中,用户在与程序交互过程中输入的所有内容似乎都被缓冲,等待第一次使用时倒出的raw_input
(例如).
找到一些代码来调用之前raw_input
似乎"解决"osX上的问题,虽然据说它提供了对windows功能的访问:
class FlushInput(object):
def flush_input(self):
try:
import msvcrt
while msvcrt.kbhit():
msvcrt.getch()
except ImportError:
import sys, termios
termios.tcflush(sys.stdin, termios.TCIOFLUSH)
Run Code Online (Sandbox Code Playgroud)
我是否正确理解stdin和stdout,stderr方法会因操作系统而异?
我想像Django这样的框架可能有内置的方法来简化交互性,但它基本上只需要几行代码来告诉python"在被邀请之前不接受任何输入?"
仍然掌握对数与指数的对立面.(将它们描述为指数的反转也是正确的吗?)
Big-O符号上已经有很多很棒的SO条目,包括O(log n)和QuickSort n(log n).找到了一些有用的图表.
在看Divide and Conquer算法时,我遇到了n log n
,我认为这个算法n
乘以它的值log n
.我经常尝试100 log 100这样的具体例子,以帮助可视化抽象方程式中发生的事情.
只是阅读log n
假设base 10
.是否n log n
翻译成:
"数量n乘以10的数量需要提高到等于n的数量"?
所以100 log 100
相等,200
因为10需要被提升到2的幂,等于100?
当算法迭代一组时,基数是否会发生变化?如果我们正在谈论抽象,那么基数是否重要?
我觉得我很接近,但似乎不能让两个节与一个隐藏的声音对齐 - 所以节奏的变化可以通过歌词来近似.
melody = \relative c' {
\clef treble
\key c \major
\time 4/4
c4 d e f | g f e d |
<<
\new Voice = "shown" {
\relative c' {
c4 d c d | e f g2
}
}
\new Voice = "hidden" {
\hide {
c'8 c d d c c d d | e f g2
}
}
>>
}
text = \lyricmode {
Here we have a | li -- tle si …
Run Code Online (Sandbox Code Playgroud)