我是多处理的新手.我一直在阅读有关多处理模块的文档.我读过有关池,线程,队列等的内容,但我完全迷失了.
我想用多处理做的是,转换我简陋的http下载器,与多个工作者一起工作.我现在正在做的是,下载一个页面,解析到页面以获得有趣的链接.继续,直到下载所有有趣的链接.现在,我想用多处理来实现它.但我现在不知道如何组织这个工作流程.我有两个想法.首先,我想过有两个队列.需要下载的链接的一个队列,其他用于要解析的链接的队列.一名工作人员下载页面,并将其添加到队列中,该队列用于需要解析的项目.其他进程解析一个页面,并将它感兴趣的链接添加到另一个队列.我期望从这种方法出现的问题是:首先,为什么一次下载一页并一次解析页面.此外,一个进程如何知道在耗尽队列中的所有项目之后,有些项目要添加到队列中.
我想要使用的另一种方法是.有一个函数,可以用url作为参数调用.此函数下载文档并开始解析链接.每次遇到一个有趣的链接时,它会立即创建一个与自身运行相同功能的新线程.我对这种方法的问题是,我如何跟踪周围产生的所有进程,如何知道是否还有进程要运行.而且,我如何限制最大进程数.
所以我完全迷失了.任何人都可以建议一个好的策略,也许可以显示一些关于如何实现这个想法的示例代码.
我有一个mysql数据库,我正在使用它作为临时存储验证码值.它有一个自动递增的id键,带有int(11)字段.如果此值大于11位,会发生什么?
我可以base64编码我在运行中创建的图像,而无需先将其保存到磁盘吗?据我所知,base64_encode()只接受字符串,我找不到一种方法来反映图像源对象作为字符串而不先保存它,并加载它file_get_contents()
我正在尝试使用构建一个python模块(scikit.timeseries)
python setup.py build
Run Code Online (Sandbox Code Playgroud)
但是这样的错误:
/Versions/2.6/lib/python2.6/site-packages/numpy/core/include -I/Library/Frameworks/Python.framework/Versions/2.6/include/python2.6 -c'
gcc-4.0: scikits/timeseries/src/cseries.c
sh: gcc-4.0: command not found
Run Code Online (Sandbox Code Playgroud)
这是因为我在OSX Lion上并且gcc-4.0没有退出,gcc确实如此:
gcc version 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.1.0
Run Code Online (Sandbox Code Playgroud)
但它是别名的gcc而不是gcc-4.0.如何告诉setup.py查找gcc而不是gcc-4.0?
谢谢 !
我试图让多处理和套接字编程一起工作,但是,我在这一点上陷入困境.问题是,我收到此错误:
File "multiprocesssockserv.py", line 11, in worker
clientsocket = socket.fromfd(clientfileno, socket.AF_INET, socket.SOCK_STREAM)
error: [Errno 9] Bad file descriptor
Run Code Online (Sandbox Code Playgroud)
导致错误的完整代码如下:
import multiprocessing as mp
import logging
import socket
logger = mp.log_to_stderr(logging.WARN)
def worker(queue):
while True:
clientfileno = queue.get()
print clientfileno
clientsocket = socket.fromfd(clientfileno, socket.AF_INET, socket.SOCK_STREAM)
clientsocket.recv()
clientsocket.send("Hello World")
clientsocket.close()
if __name__ == '__main__':
num_workers = 5
socket_queue = mp.Queue()
workers = [mp.Process(target=worker, args=(socket_queue,)) for i in
range(num_workers)]
for p in workers:
p.daemon = True
p.start()
serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
serversocket.bind(('',9090))
serversocket.listen(5) …Run Code Online (Sandbox Code Playgroud) > library(vcd)
Loading required package: MASS
Loading required package: grid
Loading required package: colorspace
> library(MASS)
> tbl = table(survey$W.Hnd,survey$Fold)
> print(tbl)
L on R Neither R on L
Left 10 1 7
Right 88 17 113
> mosaic(tbl)
Error in if (split_vertical[i]) { : missing value where TRUE/FALSE needed
Calls: mosaic -> mosaic.default -> strucplot -> labeling
Execution halted
Run Code Online (Sandbox Code Playgroud)
为什么我会收到此错误,以及如何修复代码?
简单粘贴代码在这里:
library(vcd)
library(MASS)
tbl = table(survey$W.Hnd,survey$Fold) # survey is a library data set in MASS
print(tbl)
mosaic(tbl) # produces …Run Code Online (Sandbox Code Playgroud) 我试图获取随机的网页样本,我不想因各种原因而废弃谷歌搜索结果.以下是我尝试过的方法;
import socket
from random import randint
def doesitserveawebpage(ip):
ip=str(ip)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
s.connect((ip, 80))
s.shutdown(2)
return True
except:
return False
def givemerandomwebsite():
adrformat = "%d.%d.%d.%d"
while True:
adr = adrformat % tuple(randint(0,255) for _ in range(4))
try:
print "Tring %s" % adr
name = socket.gethostbyaddr(adr)
if (doesitserveawebpage(adr)):
return name
else:
continue
except socket.herror:
continue
Run Code Online (Sandbox Code Playgroud)
好吧,它不起作用.首先,它的工作太慢了.其次,它给了我不提供网页的地址.无论如何我可以使这个代码更好,或者你会建议另一种方法来解决这个问题?
有没有办法在不等待所有测试完成的情况下,在发生错误或失败时立即进行 python unittest(我使用的是 2.6,我有 unittest2 可用)?
还有一个额外的问题:) 有没有办法订购测试。例如,在前面可能会失败的拉测试?
我是C的新手,这种typedef对我来说有点奇怪.有人可以解释它的作用吗?
typedef void (*alpm_cb_log)(alpm_loglevel_t, const char *, va_list);
Run Code Online (Sandbox Code Playgroud)
它位于头文件中.
我想从目录运行所有脚本.喜欢 ,
该目录包含40个脚本,我想先并行运行5个脚本.在完成这些脚本之后,将执行下一个5脚本以及剩余的脚本.
请使用linux和perl命令提供任何解决方案