几天前,我提出了一个关于如何帮助我设计构建多个HTTP请求的范例的问题
这是场景.我想拥有一个多生产者,多消费者系统.我的生产者抓取并抓取一些网站,并将它找到的链接添加到队列中.由于我将抓取多个网站,我希望有多个生产者/抓取工具.
消费者/工作者以此队列为食,向这些链接发出TCP/UDP请求并将结果保存到我的Django DB.我还希望有多个工作人员,因为每个队列项目完全相互独立.
人们建议使用coroutine库,即Gevent或Eventlet.从未使用过coroutines,我读到即使编程范例类似于线程范例,只有一个线程正在执行,但是当阻塞调用发生时 - 例如I/O调用 - 堆栈在内存中切换而另一个在绿色中切换线程接管,直到它遇到某种阻塞I/O调用.希望我做对了吗?这是我的一篇SO帖子中的代码:
import gevent
from gevent.queue import *
import time
import random
q = JoinableQueue()
workers = []
producers = []
def do_work(wid, value):
gevent.sleep(random.randint(0,2))
print 'Task', value, 'done', wid
def worker(wid):
while True:
item = q.get()
try:
print "Got item %s" % item
do_work(wid, item)
finally:
print "No more items"
q.task_done()
def producer():
while True:
item = random.randint(1, 11)
if item == 10:
print "Signal Received"
return
else:
print "Added item %s" …Run Code Online (Sandbox Code Playgroud) 我有一个简单的bash脚本调用test_snmp,可以这样说:
#!/bin/bash
echo $1
Run Code Online (Sandbox Code Playgroud)
我将snmpd.conf设置如下:
rwcommunity public 127.0.0.1
extend .1.3.6.1.4.1.2021.53 /bin/bash /tmp/test_snmp
Run Code Online (Sandbox Code Playgroud)
我想做的是运行一个snmpwalk命令,例如:
snmpwalk -v2c -c public 127.0.0.1 .1.3.6.1.4.1.2021.53 "PRINT SOMETHING"
Run Code Online (Sandbox Code Playgroud)
从输出中我看到
oid = iso.3.6.1.4.1.2021.53.3.1.1.9.47.98.105.110.47.98.97.115.104 = "",是脚本的输出。但是我想将该字符串"PRINT SOMETHING"作为$1上述脚本的参数传递,然后"PRINT SOMETHING"使用snmpget命令获取字符串(在本例中为),例如:
snmpget -v2c -c public 127.0.0.1 iso.3.6.1.4.1.2021.53.3.1.1.9.47.98.105.110.47.98.97.115.104
Run Code Online (Sandbox Code Playgroud)
这只是一个例子,我正在通过snmp运行脚本来测试我拥有哪些选项,因为如果可行,那么我将编写另一个脚本以远程运行,但是我必须使用变量来运行它们。
有人知道怎么做吗?
谢谢
我需要一些帮助.我有一个主要用本机C代码编写的应用程序.我用这个__system_property_get(const char * name, char * value)方法来读取序列号.我的本机代码中各个点的设备.使用Android 8,我现在总是收到"拒绝访问"消息.
libc:访问被拒绝查找属性"ro.serialno"
有没有办法让我仍然能够读取序列号.在Android 8?我尝试切换到targetSDKversion <26但它仍然给我一个"拒绝访问"的消息.如果我使用Java Build.SERIAL(不管SDK版本),我会得到正确的值,Build.getSerial()如果我授予READ_PHONE_STATE权限,我会在SDK版本26中得到正确的值.但我无法在Java中读取这些值并将它们传递给本机代码,而无需重写本机代码.
有帮助吗?
我正在努力增强我的Python技能,我遇到了使用types.FunctionType的Saltstack的开源代码,我不明白发生了什么.
函数create()有以下代码:
kwargs = {
'name': vm_['name'],
'image': get_image(conn, vm_),
'size': get_size(conn, vm_),
'location': get_location(conn, vm_),
}
Run Code Online (Sandbox Code Playgroud)
函数get_image和get_size传递给函数'namespaced_function',如下所示:
get_size = namespaced_function(get_size, globals())
get_image = namespaced_function(get_image, globals())
Run Code Online (Sandbox Code Playgroud)
具有命名空间功能
def namespaced_function(function, global_dict, defaults=None, preserve_context=False):
'''
Redefine (clone) a function under a different globals() namespace scope
preserve_context:
Allow keeping the context taken from orignal namespace,
and extend it with globals() taken from
new targetted namespace.
'''
if defaults is None:
defaults = function.__defaults__
if preserve_context:
_global_dict = …Run Code Online (Sandbox Code Playgroud) 我想计算我想发送的UDP报头数据包的校验和:
packetosend = """60 00 00 00 00 24 3a 40 20 02 c0 a8 01 50 00 01 00 00
00 00 00 00 09 38 20 02 c0 a8 01 50 00 01 00 00 00 00 00 00 09 6f"""
Run Code Online (Sandbox Code Playgroud)
所以我需要加入这个utf-16(不是问题)并计算这个特定数据包的校验和.我怎样才能做到这一点?
谢谢!
编辑:是的它是ICMPv6数据包的IPv6标头,无论如何我想知道的是公式,以及它是如何工作的.
我将给出一个ICMP ping echo(v4)数据包的另一个例子:
packet = """
08 00 d1 15 76 0c 00 07 bf d3 55 4a ad b5 03 00 // "d1 15" is the packet checksum
08 09 0a …Run Code Online (Sandbox Code Playgroud) 我需要一个URL的正则表达式,如:
/slug/#slug/slug/
Run Code Online (Sandbox Code Playgroud)
我知道应该是这样的:
r'^(?P<slug1>[-\w]+)/#(?P<slug2>[-\w]+)/(?P<slug3>[-\w]+)/$'
Run Code Online (Sandbox Code Playgroud)
但是我遇到了这个角色的问题 #
我有以下问题:这是代码块:
void get_all_buf(int sock, std::string & inStr) {
int n = 1;
char c;
char temp[1024*1024];
bzero(temp, sizeof(temp));
n = recv(sock, temp, sizeof(temp), 0);
inStr = temp;
};
Run Code Online (Sandbox Code Playgroud)
但有时recv返回不是整个数据(数据长度总是少于sizeof(temp)),只有它的一部分.写方面总是向我发送整个数据(我用嗅探器得到它).什么事?谢谢.
PS我知道,好的方式建议我检查n(if (n < 0) perror ("error while receiving data")),但现在没关系 - 这不是我的问题的原因.
PS2我忘记了 - 这是阻塞插座.
我有一个"我只想了解它"的问题..首先,我在Ubuntu上使用python 2.6.5.
因此.. python中的线程(通过线程模块)只是"线程",只是告诉GIL在一段时间内从每个"线程"运行代码块,所以......实际上并没有这里真正的线程..
所以问题是 - 如果我在一个线程中有一个阻塞套接字,现在我发送数据并阻塞线程5秒钟.我希望阻止所有程序,因为它是一个sock.send阻止线程的C命令().但我很惊讶地看到主线程继续运行.所以问题是 - 在达到像send这样的阻塞命令后,GIL如何能够继续并运行其余的代码?是不是必须在这里使用真正的线程?
谢谢.
我有一个人名和LinkedIn个人资料网址数据库.令人恼火的是,LinkedIn URL(如twitter)没有标准格式,但通常采用以下形式:
1)http://www.linkedin.com/in/geoffroyondet
2)http://www.linkedin.com/profile/view?id=34178115
在我的网站上,我想显示人们的LinkedIn详细信息.我已经让OAuth工作正常,对于第一种格式的人(上图),我可以在我的网站上成功显示他们的LinkedIn数据.我正在使用https://developer.linkedin.com/documents/profile-api中的"公开个人资料网址"选项
但对于第二种格式,我遇到了问题.它作为"公共配置文件"无效,并且URL中的ID似乎不是上面链接中的"member_id".
顺便说一句,如果我尝试将此数字ID用作member_id,我会收到以下错误:
object(SimpleXMLElement)[652]
public 'status' => string '404' (length=3)
...
public 'message' => string 'Invalid member id {34178115}' (length=28)
Run Code Online (Sandbox Code Playgroud)
从使用API开始,我可以获得字母数字id(member_id)的唯一方法是成功的API调用(blah-> person-> id).但是为了成功进行API调用,我首先需要一个有效的URI.所以它似乎是鸡和鸡蛋的情况.
有关如何使用上面的第二个URL显示LinkedIn数据的任何建议?
我有一个基于的服务器ThreadingTCPServer.现在我想要为该服务器添加SSL支持.没有SSL它工作正常,但使用SSLv3我无法将客户端连接到服务器,它总是抛出一个异常:Error 111 Connection Refused.错误是该端口上没有SSL服务器.
我根据Stackoverflow上的示例添加了SSL支持.这是我的代码:
服务器:
class BeastServer(SocketServer.ThreadingMixIn, SocketServer.TCPServer):
def __init__(self, server_address, RequestHandlerClass, bind_and_activate=True):
SocketServer.BaseServer.__init__(self, server_address,
RequestHandlerClass)
ctx = SSL.Context(SSL.SSLv3_METHOD)
cert = 'server.pem'
key = 'key.pem'
ctx.use_privatekey_file(key)
ctx.use_certificate_file(cert)
self.socket = SSL.Connection(ctx, socket.socket(self.address_family,
self.socket_type))
if bind_and_activate:
#self.server_bind()
#self.server_a
Run Code Online (Sandbox Code Playgroud)
客户:
class Client(object) :
def verbinden (self, ip_) :
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
ssl_sock = ssl.wrap_socket(s, cert_reqs=ssl.CERT_REQUIRED,
ssl_version=ssl.PROTOCOL_SSLv3, ca_certs='server.pem')
ssl_sock.connect((ip_, 10012))
return ssl_sock
Run Code Online (Sandbox Code Playgroud)
密钥和证书文件是使用开放SSL创建的.我希望有人能告诉我问题是什么.
谢谢你的帮助
最好的问候帕特里克
python ×6
android ×1
api ×1
c ×1
c++ ×1
checksum ×1
coroutine ×1
django ×1
django-urls ×1
gevent ×1
linkedin ×1
linux ×1
native ×1
net-snmp ×1
networking ×1
packet ×1
permissions ×1
php ×1
recv ×1
regex ×1
salt-stack ×1
snmp ×1
socketserver ×1
ssl ×1