我试图弄清楚如何从php(最新版本)中非常大的xml文件中删除元素(及其子元素).
我知道我可以使用dom和simpleXml,但这需要将文档加载到内存中.
我正在查看XML编写器/阅读器/解析器函数和谷歌搜索,但似乎没有任何关于这个主题(所有答案建议使用dom或simpleXml).这不可能是正确的 - 我错过了什么吗?
我发现的最接近的是这个(C#):
您可以使用XmlReader来顺序读取您的xml(ReadOuterXml在您的情况下可能非常有用,一次读取整个节点).然后使用XmlWriter写出要保留的所有节点.(从大型XML文件中删除节点)
真?这是方法吗?我要复制整个巨大的文件?
真的没有别的办法吗?
如建议的那样
我可以使用phps XML阅读器或解析器读取数据,可能缓冲它,然后写入/转储+将其追加到新文件中.
但这种方法真的很实用吗?
我有将大型xml文件拆分成小块的经验,基本上使用建议的方法,并且该过程花了很长时间才能完成.
我的数据集目前还不够大,无法让我知道如何解决这个问题.我只能假设结果是相同的(一个非常缓慢的过程).
有没有人在实践中应用这个经验?
我正在使用multiprocessing.Pool运行许多进程
每个进程都要查询我的mysql数据库.
我目前连接到数据库一次,然后共享进程之间的连接
它有效但偶尔会出现奇怪的错误.我已经确认在查询数据库时会导致错误.
我认为问题是因为所有进程都使用相同的连接.
当我寻找答案时,我偶然发现了这个q&a 如何在Python中的多个进程之间共享一个MySQL数据库连接
所以我查了一下类pooling.MySQLConnectionPool
如果我明白这一点.我将建立一个具有多个连接的池,并在进程之间共享池.然后,每个进程将查看该池,如果连接可用,则使用它,或者等待直到释放连接.
但后来我发现这个q&a 从Python多处理访问MySQL连接池
似乎首先"mata"证实了我的怀疑但同时他驳回了在进程之间共享设置池的用法
在不同进程之间共享数据库连接(或连接池)将是一个坏主意(我非常怀疑它甚至可以正常工作),
相反,他建议
所以每个进程使用它自己的连接实际上是你应该瞄准的目标.
那是什么意思?
mata在他的回答中给出的例子似乎足够合理但我不理解整个池作为init参数的传递
p = Pool(initializer=init)
Run Code Online (Sandbox Code Playgroud)
将阻塞的Pool.map()方法更改为Pool.map_async()并将池中的连接发送到map_async(q,ConnObj)应该足够了吗?
在评论中提到了这一点
利用具有许多进程的单个池的唯一方法是使用一个专用进程,该进程使用队列与所有数据库访问进行通信
更新找到了这个.似乎同意:https://stackoverflow.com/a/26072257/1267259
如果您需要大量并发工作者,但他们并不是一直使用数据库,那么您应该拥有一组数据库工作进程来处理所有数据库访问并与您的其他工作进程交换数据.每个数据库工作进程都有一个DB连接.其他进程只通过数据库工作人员与数据库通信.
Python的多处理队列,fifos等为此提供了适当的消息传递功能.
是不是mysql池的目的是处理进程的请求并将它们转发到可用的连接?
现在我只是困惑......
我开始了解 http 状态代码并且有点卡在 510 Not Extended 上。
它在维基百科等许多网站上都有提及,但未在非官方代码下提及。但是,当我阅读rfc2774 时,它被标记为“实验性”。
我也想知道状态码应该如何工作
您是否仅在客户端尝试发送服务器不支持的 Man 或 C-Man 时使用 510?
"A mandatory extension policy in the request is not accepted by the server for this resource."
askapache.com Servers can force the use of the HTTP Extension Framework by using the 510 "Not Extended" HTTP status code. 简单对象访问协议 (SOAP) 1.1服务器如何发回客户端发出扩展请求所需的所有信息?
rfc 说
请求中未满足访问资源的策略。服务器应该发回客户端发出扩展请求所需的所有信息。我 …
使用Python 3.4
我有一个失败的目标函数,并且 apply_async 调用我的错误回调函数而不是我的回调函数。
问题是捕获并发送到 error_callback 的异常没有帮助,我无法弄清楚目标函数中发生错误的位置。
我的错误回调
def error_callback(self,e):
print('error_callback()',e)
# tested one of these at a time
traceback.print_exc()
traceback.print_last()
traceback.print_stack()
Run Code Online (Sandbox Code Playgroud)
和回溯输出
打印_执行
File "/usr/lib/python3.4/traceback.py", line 125, in _iter_chain
context = exc.__context__
AttributeError: 'NoneType' object has no attribute '__context__'
Run Code Online (Sandbox Code Playgroud)
最后打印
File "/usr/lib/python3.4/traceback.py", line 262, in print_last
raise ValueError("no last exception")
ValueError: no last exception
Run Code Online (Sandbox Code Playgroud)
打印堆栈
File "./relative/path/to/my/script.py", line 71, in traceback
traceback.print_stack()
Run Code Online (Sandbox Code Playgroud)
我不得不承认,我对回溯库以及如何使用它不太满意,但在我看来,在这种情况下不可能使用回溯?
我应该怎么办?
我需要更新空间数据库中的每条记录,其中我有一个覆盖多边形数据集的点数据集。对于每个点要素,我想分配一个键以将其与它所在的多边形要素相关联。因此,如果我的点“纽约市”位于多边形美国内,而对于美国多边形“GID = 1”,我将为我的点纽约市分配“gid_fkey = 1”。
为此,我创建了以下查询。
procQuery = 'UPDATE city SET gid_fkey = gid FROM country WHERE ST_within((SELECT the_geom FROM city WHERE wp_id = %s), country.the_geom) AND city_id = %s' % (cityID, cityID)
Run Code Online (Sandbox Code Playgroud)
目前,我正在从另一个查询中获取 cityID 信息,该查询仅选择 gid_fkey 为 NULL 的所有 cityID。基本上我只需要遍历这些并运行前面显示的查询。由于查询仅依赖于其他表中的静态信息,因此理论上所有这些过程都可以同时运行。我已经实现了下面的线程程序,但我似乎无法迁移到多处理
import psycopg2, pprint, threading, time, Queue
queue = Queue.Queue()
pyConn = psycopg2.connect("dbname='geobase_1' host='localhost'")
pyConn.set_isolation_level(0)
pyCursor1 = pyConn.cursor()
getGID = 'SELECT cityID FROM city'
pyCursor1.execute(getGID)
gidList = pyCursor1.fetchall()
class threadClass(threading.Thread):
def __init__(self, queue):
threading.Thread.__init__(self)
self.queue = queue
def run(self):
while …Run Code Online (Sandbox Code Playgroud) 在将元组转换为列表或其他方式时,python如何在内部进行转换.
它是否"切换一个标志"(现在你是不可变的,现在你不是!)还是它会遍历这些项并转换它们?
最好使用请求库
HTTP/1.1 200 OK <-- I want this...
Content-Type: text/html; charset=utf-8
Run Code Online (Sandbox Code Playgroud)
似乎没有提供该属性http://docs.python-requests.org/en/master/api/#requests.Response
有没有办法访问原始响应字符串?
我找到了http://docs.python-requests.org/en/master/user/quickstart/#raw-response-content 但我没有看到任何内容
r = requests.head(uri, stream=True)
print(r.raw.read(10)) # -> b''
Run Code Online (Sandbox Code Playgroud) python ×4
python-3.x ×4
http ×1
list ×1
mysql ×1
php ×1
postgis ×1
postgresql ×1
tuples ×1
xml ×1