If your not using a priority queue (or a minimum search), it's not Dijkstra. In Python, a priority queue is easy to implement using the heapq module.
I took the liberty to simplify and modify your code to something that looks more like Dijkstra's algorithm. I didn't test it as I don't have access to your data structures, so there are very probably some bugs, but it should be a better starting point:
from heapq import *
def heatmap(self, source_x,source_y):
l_open = []
source = self.lookup(source_x,source_y)
if source: l_open.append((0,source,source)) # (value, cell, previous)
while l_open:
value, cell, previous = heappop(l_open)
if cell.visited: continue
cell.visited = True
cell.previous = previous
cell.value = value
for x,y in self.get_neighbor_addrs(cell.x,cell.y)
c = self.lookup(x,y)
if c and not (c.visited or c.blocked):
heappush(l_open, (value + 1, c, cell))
return self.render(0,self.width, 0,self.height,True)
As long as the cell cost is constant, Dijkstra and BFS are equivalent; Dijkstra becomes interesting when the cost is variable (but it should not be negative).